├── robots.txt ├── CNAME ├── .gitignore ├── _config.yml ├── _includes └── app-developers.mkd ├── electrical ├── CHANGELOG.xls ├── img │ ├── headers_top.jpg │ ├── headers_bottom.jpg │ ├── InterfaceBlockDiagram.pdf │ ├── LPC1768_Translator_block.pdf │ ├── vehicle-interface.brd-scaled.png │ ├── vehicle-interface.sch-scaled.png │ └── BT_Endurance_Histogram_012613_lrg.png ├── sources │ ├── vehicle-interface.brd.png │ ├── vehicle-interface.sch.pdf │ ├── vehicle-interface.bom-v3.xls │ ├── index.mkd │ └── vehicle-interface.parts.txt ├── future-work.mkd ├── index.mkd ├── issues.mkd ├── design │ ├── bluetooth.mkd │ ├── microcontroller.mkd │ ├── can.mkd │ ├── usb.mkd │ └── power.mkd └── io.mkd ├── AUTHORS ├── assembly ├── pogo_location.xls ├── electrical │ ├── vehicle-interface.GML │ ├── vehicle-interface.gpi │ ├── vehicle-interface.dri │ ├── vehicle-interface.TXT │ ├── index.mkd │ ├── vehicle-interface.GBS │ ├── vehicle-interface.GTP │ └── vehicle-interface.GTS ├── index.mkd └── testing.mkd ├── firmware ├── img │ ├── usb-eject.png │ ├── flashmagic.png │ ├── isp-header.jpg │ ├── jtag-header.jpg │ ├── usb-drive-appears.png │ ├── usb-new-firmware.png │ ├── usb-existing-firmware.png │ ├── vi-programming-button.jpg │ └── programming-entering-bootloader.jpg ├── programming │ ├── jtag.mkd │ ├── isp.mkd │ └── usb.mkd ├── index.mkd └── rn41.mkd ├── static ├── images │ ├── vi-ports.jpg │ ├── openxc-logo.png │ ├── vi-open-top.jpg │ ├── vi-opening.jpg │ ├── vi-surface.png │ ├── vi-assembled.jpg │ ├── vi-packaging.png │ ├── vi-back-angled.jpg │ ├── vi-back-square.jpg │ ├── vi-front-angled.jpg │ ├── vi-front-square.jpg │ ├── vi-open-bottom.jpg │ ├── vi-open-top-right.jpg │ └── vi-installed-in-vehicle.jpg ├── bootstrap │ ├── img │ │ ├── glyphicons-halflings.png │ │ └── glyphicons-halflings-white.png │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.ttf │ │ └── glyphicons-halflings-regular.woff │ ├── js │ │ └── transition.js │ └── css │ │ ├── bootstrap-theme.min.css │ │ ├── bootstrap-responsive.min.css │ │ └── bootstrap-theme.css ├── js │ └── app.js └── css │ └── styles.css ├── mechanical ├── OpenXC_VI_Top.PDF ├── OpenXC_Diffuser.PDF ├── OpenXC_VI_Bottom.PDF ├── img │ ├── OpenXC_Diffuser.png │ ├── OpenXC_VI_Top.png │ └── OpenXC_VI_Bottom.png └── index.mkd ├── _layouts ├── programming.mkd ├── assembly.mkd ├── firmware.mkd ├── electrical-design.mkd ├── electrical.mkd └── default.html ├── README.md ├── index.mkd └── LICENSE-hardware /robots.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | vi.openxcplatform.com 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.s#? 2 | *.b#? 3 | *.l#? 4 | _site 5 | *~ 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | markdown: rdiscount 2 | pygments: true 3 | production: true 4 | -------------------------------------------------------------------------------- /_includes/app-developers.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | testetstest 6 | 7 | ## FOO 8 | -------------------------------------------------------------------------------- /electrical/CHANGELOG.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/CHANGELOG.xls -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Andrew Tergis 2 | David Evans 3 | Chris Peplin cpeplin@ford.com 4 | Zac Nelson znelson1@ford.com 5 | -------------------------------------------------------------------------------- /assembly/pogo_location.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/assembly/pogo_location.xls -------------------------------------------------------------------------------- /firmware/img/usb-eject.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/usb-eject.png -------------------------------------------------------------------------------- /static/images/vi-ports.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-ports.jpg -------------------------------------------------------------------------------- /firmware/img/flashmagic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/flashmagic.png -------------------------------------------------------------------------------- /firmware/img/isp-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/isp-header.jpg -------------------------------------------------------------------------------- /firmware/img/jtag-header.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/jtag-header.jpg -------------------------------------------------------------------------------- /mechanical/OpenXC_VI_Top.PDF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/OpenXC_VI_Top.PDF -------------------------------------------------------------------------------- /static/images/openxc-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/openxc-logo.png -------------------------------------------------------------------------------- /static/images/vi-open-top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-open-top.jpg -------------------------------------------------------------------------------- /static/images/vi-opening.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-opening.jpg -------------------------------------------------------------------------------- /static/images/vi-surface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-surface.png -------------------------------------------------------------------------------- /electrical/img/headers_top.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/headers_top.jpg -------------------------------------------------------------------------------- /mechanical/OpenXC_Diffuser.PDF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/OpenXC_Diffuser.PDF -------------------------------------------------------------------------------- /mechanical/OpenXC_VI_Bottom.PDF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/OpenXC_VI_Bottom.PDF -------------------------------------------------------------------------------- /static/images/vi-assembled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-assembled.jpg -------------------------------------------------------------------------------- /static/images/vi-packaging.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-packaging.png -------------------------------------------------------------------------------- /electrical/img/headers_bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/headers_bottom.jpg -------------------------------------------------------------------------------- /firmware/img/usb-drive-appears.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/usb-drive-appears.png -------------------------------------------------------------------------------- /firmware/img/usb-new-firmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/usb-new-firmware.png -------------------------------------------------------------------------------- /mechanical/img/OpenXC_Diffuser.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/img/OpenXC_Diffuser.png -------------------------------------------------------------------------------- /mechanical/img/OpenXC_VI_Top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/img/OpenXC_VI_Top.png -------------------------------------------------------------------------------- /static/images/vi-back-angled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-back-angled.jpg -------------------------------------------------------------------------------- /static/images/vi-back-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-back-square.jpg -------------------------------------------------------------------------------- /static/images/vi-front-angled.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-front-angled.jpg -------------------------------------------------------------------------------- /static/images/vi-front-square.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-front-square.jpg -------------------------------------------------------------------------------- /static/images/vi-open-bottom.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-open-bottom.jpg -------------------------------------------------------------------------------- /mechanical/img/OpenXC_VI_Bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/mechanical/img/OpenXC_VI_Bottom.png -------------------------------------------------------------------------------- /static/images/vi-open-top-right.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-open-top-right.jpg -------------------------------------------------------------------------------- /firmware/img/usb-existing-firmware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/usb-existing-firmware.png -------------------------------------------------------------------------------- /firmware/img/vi-programming-button.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/vi-programming-button.jpg -------------------------------------------------------------------------------- /electrical/img/InterfaceBlockDiagram.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/InterfaceBlockDiagram.pdf -------------------------------------------------------------------------------- /static/images/vi-installed-in-vehicle.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/images/vi-installed-in-vehicle.jpg -------------------------------------------------------------------------------- /electrical/img/LPC1768_Translator_block.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/LPC1768_Translator_block.pdf -------------------------------------------------------------------------------- /electrical/sources/vehicle-interface.brd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/sources/vehicle-interface.brd.png -------------------------------------------------------------------------------- /electrical/sources/vehicle-interface.sch.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/sources/vehicle-interface.sch.pdf -------------------------------------------------------------------------------- /static/bootstrap/img/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/bootstrap/img/glyphicons-halflings.png -------------------------------------------------------------------------------- /electrical/img/vehicle-interface.brd-scaled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/vehicle-interface.brd-scaled.png -------------------------------------------------------------------------------- /electrical/img/vehicle-interface.sch-scaled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/vehicle-interface.sch-scaled.png -------------------------------------------------------------------------------- /electrical/sources/vehicle-interface.bom-v3.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/sources/vehicle-interface.bom-v3.xls -------------------------------------------------------------------------------- /firmware/img/programming-entering-bootloader.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/firmware/img/programming-entering-bootloader.jpg -------------------------------------------------------------------------------- /static/bootstrap/img/glyphicons-halflings-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/bootstrap/img/glyphicons-halflings-white.png -------------------------------------------------------------------------------- /electrical/img/BT_Endurance_Histogram_012613_lrg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/electrical/img/BT_Endurance_Histogram_012613_lrg.png -------------------------------------------------------------------------------- /static/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /static/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /static/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openxc/reference-vi/HEAD/static/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.GML: -------------------------------------------------------------------------------- 1 | G75* 2 | %MOIN*% 3 | %OFA0B0*% 4 | %FSLAX24Y24*% 5 | %IPPOS*% 6 | %LPD*% 7 | %AMOC8* 8 | 5,1,8,0,0,1.08239X$1,22.5* 9 | % 10 | M02* 11 | -------------------------------------------------------------------------------- /_layouts/programming.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: firmware 3 | --- 4 | 5 | 10 | 11 | {{ content }} 12 | -------------------------------------------------------------------------------- /_layouts/assembly.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | section: assembly 4 | --- 5 | 6 | 11 | 12 | 15 | 16 | {{ content }} 17 | -------------------------------------------------------------------------------- /_layouts/firmware.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | section: firmware 4 | --- 5 | 6 | 11 | 12 | 15 | 16 | {{ content }} 17 | -------------------------------------------------------------------------------- /_layouts/electrical-design.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical 3 | --- 4 | 5 | 13 | 14 | {{ content }} 15 | -------------------------------------------------------------------------------- /_layouts/electrical.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | section: electrical 4 | --- 5 | 6 | 13 | 14 | 17 | 18 | {{ content }} 19 | -------------------------------------------------------------------------------- /static/js/app.js: -------------------------------------------------------------------------------- 1 | $(document).ready(function() { 2 | $('.nav li').each(function(i, value) { 3 | if($(value).find("a").attr("href") === window.location.pathname) { 4 | $(value).addClass('active'); 5 | } 6 | }); 7 | 8 | if(window.location.hash) { 9 | $(window.location.hash).show(); 10 | } else { 11 | // auto-detect OS 12 | var platform = navigator.platform; 13 | if(/mac/i.test(platform)) { 14 | $("#collapseMac").addClass("in"); 15 | } else if(/linux/i.test(platform)) { 16 | $("#collapseLinux").addClass("in"); 17 | } else { 18 | // default to Windows 19 | $("#collapseWindows").addClass("in"); 20 | } 21 | } 22 | }); 23 | -------------------------------------------------------------------------------- /assembly/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: assembly 3 | title: Assembly Instructions 4 | --- 5 | 6 | If you want to take this design into the physical world, the major components 7 | you need to build are: 8 | 9 | * Manufacture the PCB, e.g. with a company like [OSH Park](http://oshpark.com/) 10 | * Manufacture the enclosure, e.g. with your own [3D 11 | printer](https://store.makerbot.com/3d-printers) (you may find one at your 12 | local [TechShop][]), a rapid prototyping shop like 13 | [Fathom](http://studiofathom.com/) or an injection molding service like 14 | [Protomold](http://www.protomold.com/). 15 | * Assemble the components onto the PCB - there are surface mount components that 16 | will reuquire a reflow oven, so you can't hand solder this. Again, check out 17 | your local [TechShop][] (Note: currently all TechShops are close but look for similar shops such as [ProtoHaven][]) or a prototyping firm like [SF 18 | Circuits](http://www.sfcircuits.com/). 19 | 20 | [TechShop]: https://en.wikipedia.org/wiki/TechShop 21 | 22 | [ProtoHaven]: https://www.protohaven.org/ 23 | -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.gpi: -------------------------------------------------------------------------------- 1 | Generated by EAGLE CAM Processor 6.6.0 2 | 3 | Photoplotter Info File: /Users/ctang32/reference-vi/electrical/sources/vehicle-interface.gpi 4 | 5 | Date : 2/24/15 5:27 PM 6 | Plotfile : /Users/ctang32/reference-vi/electrical/sources/vehicle-interface.GML 7 | Apertures : generated: 8 | Device : Gerber RS-274-X photoplotter, coordinate format 2.4 inch 9 | 10 | Parameter settings: 11 | 12 | Emulate Apertures : no 13 | Tolerance Draw + : 0.00 % 14 | Tolerance Draw - : 0.00 % 15 | Tolerance Flash + : 0.00 % 16 | Tolerance Flash - : 0.00 % 17 | Rotate : no 18 | Mirror : no 19 | Optimize : yes 20 | Auto fit : yes 21 | OffsetX : 0inch 22 | OffsetY : 0inch 23 | 24 | Plotfile Info: 25 | 26 | Coordinate Format : 2.4 27 | Coordinate Units : Inch 28 | Data Mode : Absolute 29 | Zero Suppression : None 30 | End Of Block : * 31 | 32 | Apertures used: 33 | 34 | Code Shape Size used 35 | 36 | 37 | -------------------------------------------------------------------------------- /electrical/sources/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical 3 | title: Electrical Source Files 4 | --- 5 | 6 | The board was designed with Cadsoft EAGLE, and the source files should be 7 | compatible with the free Light Edition. 8 | 9 | ![Layout](/electrical/img/vehicle-interface.brd-scaled.png) 10 | ![Schematic](/electrical/img/vehicle-interface.sch-scaled.png) 11 | 12 | The files are all [stored in a Git repository at 13 | GitHub](https://github.com/openxc/reference-vi/tree/gh-pages/electrical/sources) - 14 | pull requests are welcome! 15 | 16 | * Electrical Schematic 17 | * [EAGLE source](/electrical/sources/vehicle-interface.sch) 18 | * [PDF](/electrical/sources/vehicle-interface.sch.pdf) 19 | * Board Layout 20 | * [EAGLE source](/electrical/sources/vehicle-interface.brd) 21 | * [PNG image](/electrical/sources/vehicle-interface.brd.png) 22 | * [Bill of Materials (BOM)](/electrical/sources/vehicle-interface.bom-v3.xls) 23 | * [Changelog](/electrical/CHANGELOG.xls) 24 | 25 | 26 | ![VI PCB Top](/static/images/vi-front-angled.jpg) 27 | ![VI PCB Bottom](/static/images/vi-back-angled.jpg) 28 | -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.dri: -------------------------------------------------------------------------------- 1 | Generated by EAGLE CAM Processor 6.6.0 2 | 3 | Drill Station Info File: /Users/ctang32/reference-vi/electrical/sources/vehicle-interface.dri 4 | 5 | Date : 2/24/15 5:27 PM 6 | Drills : generated 7 | Device : Excellon drill station 8 | 9 | Parameter settings: 10 | 11 | Tolerance Drill + : 0.00 % 12 | Tolerance Drill - : 0.00 % 13 | Rotate : no 14 | Mirror : no 15 | Optimize : yes 16 | Auto fit : yes 17 | OffsetX : 0inch 18 | OffsetY : 0inch 19 | Layers : Drills Holes 20 | 21 | Drill File Info: 22 | 23 | Data Mode : Absolute 24 | Units : 1/10000 Inch 25 | 26 | Drills used: 27 | 28 | Code Size used 29 | 30 | T01 0.0140inch 8 31 | T02 0.0200inch 160 32 | T03 0.0290inch 4 33 | T04 0.0330inch 2 34 | T05 0.0360inch 8 35 | T06 0.0400inch 10 36 | T07 0.0460inch 2 37 | T08 0.0472inch 2 38 | T09 0.0530inch 16 39 | T10 0.1000inch 4 40 | T11 0.1180inch 1 41 | 42 | Total number of drills: 217 43 | 44 | Plotfiles: 45 | 46 | /Users/ctang32/reference-vi/electrical/sources/vehicle-interface.TXT 47 | -------------------------------------------------------------------------------- /electrical/future-work.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical 3 | title: Future Work and Cost Optimization 4 | --- 5 | 6 | These are some thoughts on how to minimize the cost of 7 | the VI. 8 | 9 | **PCB Design DFM** 10 | 11 | Increase spacing between pin-through-holes(PIH) and surface-mount components(SMT) to allow wave soldering. For next iteration, potentially separate the two as much as possible. 12 | Negatives: none 13 | 14 | **Remove Bluetooth** 15 | 16 | Cost Savings: ~$25 (1000 unit quantity) by removing the module, associated 17 | components on board and the slight size decrease that would be possible. 18 | 19 | Negatives: No wireless support, USB only. 20 | 21 | **Use a different MCU in the same family** 22 | 23 | Cost Savings: ~$2 (1000 unit quantity) by going with the LPC1754 (half the price 24 | of the LPC1769) 25 | 26 | Negatives: Only 1 CAN controller 27 | 28 | **Use a different MCU from another family** 29 | 30 | Cost Savings: ? 31 | 32 | NXP's Cortex-0 family doesn't have CAN controllers. The PIC32 family is 33 | generally more expensive than the LPC1769. Any other options? 34 | 35 | **Remove 12v power port** 36 | 37 | **Remove 1 RGB LED** 38 | 39 | Cost savings: $1 40 | 41 | **Remove 1 button** 42 | 43 | Cost savings: ~$0.35 44 | 45 | -------------------------------------------------------------------------------- /firmware/programming/jtag.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: programming 3 | title: JTAG Programming 4 | --- 5 | 6 | To program using JTAG, any ARM Cortex M3 compatible JTAG adapter can be used. 7 | The interface has been tested using an 8 | [ARM-USB-TINY-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-TINY-H/) and 9 | an [ARM-USB-OCD-H](https://www.olimex.com/Products/ARM/JTAG/ARM-USB-OCD-H/) by 10 | Olimex. The interface board does not have a full-size 20-pin JTAG connector - 11 | [an adapter will be required with most JTAG 12 | programmers](https://www.olimex.com/Products/ARM/JTAG/ARM-JTAG-20-10/). Simply 13 | plug the ARM-JTAG-MINI connector into J5 on the bottom side of the vehicle 14 | interface PCB. Make sure that the ribbon cable exits the connector in the 15 | direction of the arrow on the PCB. 16 | 17 | ![JTAG Header](/firmware/img/jtag-header.jpg) 18 | 19 | With the JTAG adapter connected, and power applied to the board, the LPC1769 20 | should respond to commands from [OpenOCD](http://openocd.sourceforge.net/). If 21 | deploying code from an OpenXC repository, the board can be programmed by simply 22 | executing "make flash" from the root of the source tree. See other LPC17XX JTAG 23 | tutorials for more information, the process is nearly identical across all 24 | LPC17XX devices. 25 | 26 | -------------------------------------------------------------------------------- /firmware/programming/isp.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: programming 3 | title: ISP Programming 4 | --- 5 | 6 | If a [3.3V USB-Serial converter is 7 | available](https://www.sparkfun.com/products/9873), the device can be programmed 8 | using the ISP header, J3. To use ISP simply short JP2 and reset the LPC1769. 9 | If the ISP_EN pin is grounded when the LPC1769 boots, it will enter the built-in 10 | ISP bootloader instead of running the OpenXC firmware. UART0 will then be used 11 | for programming under an application like [Flash 12 | Magic](http://www.flashmagictool.com/). 13 | 14 | ![ISP Header](/firmware/img/isp-header.jpg) 15 | 16 | The setup using Flash Magic are as follow: 17 | 18 | 1. Connect to the OpenXC VI board using 3.3V USB-Serial converter, with exactly each pins on USB-Serial converter connect to the OpenXC VI board as shown on the above 19 | 2. Short JP2 with a proper connector or jumper cable 20 | 3. Use Flash Magic and set the following programming paratmeters: 21 | 22 | - Select LPC1769 device from dropdown list 23 | - Select the correct COM port 24 | - Set Baud rate to 38400 25 | - Set Oscillator frequency to 12000000 26 | - Check "Erase all Flash+Code Rd Prot" box 27 | - Check "Verify after programming" box 28 | - Select the downloaded [bootloader hex file](/firmware/programming/Bootloader.hex) 29 | 30 | ![flash magic](/firmware/img/flashmagic.png) 31 | 32 | Step 4: 33 | Click Start in Flash Magic! 34 | 35 | -------------------------------------------------------------------------------- /firmware/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: firmware 3 | title: Firmware Options 4 | --- 5 | 6 | You have a few different choices for code to run on the reference VI: 7 | 8 | * Use [binary firmware from an 9 | automaker](http://openxcplatform.com/vehicle-interface/firmware.html) - these 10 | are usually intended for application developers that are only interested in 11 | the translated data. You probably want this option! 12 | * Advanced: Compile the [official OpenXC VI firmware](http://vi-firmware.openxcplatform.com) 13 | (the source for most binary firmware, e.g. those from Ford). This is the 14 | best option if you have your own CAN messages you want to support. 15 | * Expert: Build your own code to run on the VI. We have a [blank starter 16 | project](https://github.com/openxc/lpc17xx-starter) with the core perphieral 17 | libraries available. 18 | 19 | If you're programming your custom firmware with the [USB 20 | bootloader](/firmware/programming/usb.html), the memory layout must be adjusted; both the 21 | official VI firmware and the blank project use a USB bootloader compatible 22 | layout by default. 23 | 24 | For programming, you have a few options: 25 | 26 | * There is a compatible [USB bootloader](/firmware/programming/usb.html). 27 | * The VI has the pins for a [mini-JTAG connector](/firmware/programming/jtag.html). 28 | * The VI also has an [ISP header](/firmware/programming/isp.html), and you can 29 | use the microcontroller's built-in ISP bootloader. 30 | -------------------------------------------------------------------------------- /firmware/rn41.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: firmware 3 | title: RN-41 Configuration 4 | --- 5 | 6 | After being manufactured, the RN-41 is in the default state and likely needs to 7 | be confirgured with the correct device name and baud rate. Some firmware, like 8 | the official [OpenXC VI firmware](/firmware/index.html) will automatically 9 | handle this configuration each time it boots up (using the [AT-commander 10 | library](http://github.com/openxc/at-commander)). If you need to configure it 11 | manually, follow these instructions. 12 | 13 | 1. Apply power to the VI. 14 | 1. Discover Bluetooth devices on the PC, find the VI, and pair with it. 15 | 1. Remove power from the VI. 16 | 1. After a few moments, reapply power to the VI 17 | 1. Very quickly (within 60 seconds) connect to the VI and open a terminal 18 | 1. Type `$$$` and press enter. If done quickly, the bluetooth LED should 19 | start flashing rapidly and `CMD` should be printed to the screen. 20 | 1. Type `ST,10` to reduce the configuration timer to 10 seconds. It can also 21 | be disabled by executing `ST,0`. 22 | 1. Type `SU,43` to set the baud rate to 460800. 23 | 1. Type `---` to exit configuration mode 24 | 1. Remove power from the VI. When power is reapplied, the settings will be 25 | changed. 26 | 27 | The commands can also be sent via `UART0` on the LPC1769 to avoid the 28 | configuration timer. See [the RN-41 advanced user 29 | manual](https://www.sparkfun.com/datasheets/Wireless/Bluetooth/rn-bluetooth-um.pdf) 30 | for additional documentation on parameters that can be changed (Page 30 for a 31 | quick reference) 32 | -------------------------------------------------------------------------------- /static/css/styles.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 60px; 3 | padding-bottom: 40px; 4 | } 5 | 6 | legend { 7 | margin:3px; 8 | text-align:center; 9 | width:100% 10 | } 11 | 12 | footer { 13 | margin-top: 40px; 14 | padding: 35px 0 36px; 15 | border-top: 1px solid #E5E5E5; 16 | } 17 | 18 | div.highlight code { 19 | background-color: whiteSmoke; 20 | } 21 | 22 | code { 23 | padding: 0; 24 | } 25 | 26 | .stacked img { 27 | margin-bottom: 10px; 28 | } 29 | 30 | .well { 31 | margin-left: 5px; 32 | } 33 | 34 | .picture.well { 35 | text-align: center; 36 | } 37 | 38 | .footer-links { 39 | margin: 10px 0; 40 | } 41 | 42 | .footer-links li { 43 | display: inline; 44 | margin-right: 10px; 45 | list-style-type: disc; 46 | } 47 | 48 | .nav-right-return { 49 | font-size: 10px; 50 | display: block; 51 | } 52 | 53 | .navbar-text { 54 | margin: 5px 0 0 10px; 55 | } 56 | 57 | .navbar-brand { 58 | padding: 10px 15px 0 15px; 59 | } 60 | 61 | h2:before, h3:before { 62 | display:block; 63 | content: ""; 64 | height: 60px; 65 | margin: -60px 0 0; 66 | } 67 | 68 | .subnav { 69 | margin-bottom: 15px; 70 | } 71 | 72 | .programming-platform { 73 | display: none; 74 | } 75 | 76 | #usb-programming-windows { 77 | display: visible; 78 | } 79 | 80 | 81 | img[alt="Vehicle Interface"] { width: 400px; } 82 | 83 | img[alt="Vehicle Interface Opened Up"] { width: 410px; } 84 | 85 | img[alt="Vehicle Interface Open"] { width: 550px; } 86 | 87 | img[alt="Top"] { width: 250px; } 88 | 89 | img[alt="Bottom"] { width: 250px; } 90 | 91 | img[alt="Diffuser"] { width: 250px; } 92 | 93 | img[alt="ISP Header"] { width: 360px; } 94 | 95 | img[alt="flash magic"] { width: 360px; } 96 | -------------------------------------------------------------------------------- /electrical/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: Electrical Design Considerations 4 | --- 5 | 6 | At the outset, we required the vehicle interface to have: 7 | 8 | * A microcontroller with enough horsepower to process and send all CAN messages 9 | * USB 2.0 port (controller included in microcontroller) 10 | * 2x CAN transceivers, 2x CAN controllers 11 | * UART with optional Bluetooth module 12 | * Be programmable over USB with no extra hardware 13 | * JTAG header for programming and debugging 14 | * 6-pin ISP header for debugging 15 | * Can be powered either via USB or the vehicle (via the OBD-II port) 16 | * Allow USB to be attached while being vehicle powered 17 | * Pass 12v power from the car to external peripherals 18 | 19 | The result, documented on this site, meets all of the requirements with these 20 | parts: 21 | 22 | * Microcontroller: NXP LPC1769 23 | * Includes a [USB controller](/electrical/design/usb.html), 2 CAN controllers 24 | and enough UARTs for debugging and Bluetooth output 25 | * [Dual-Channel CAN Transceiver](/electrical/design/can.html): NXP TJA1048 26 | * Reads from 2 different CAN buses simultaneously at up to 1Mbps per bus - by 27 | default CAN1 and CAN2-1 (according to the [OpenXC naming 28 | scheme](http://openxcplatform.com/vehicle-interface/index.html)), with CAN2-2 29 | available behind a solder jumper 30 | * [Bluetooth](/electrical/design/bluetooth.html): Roving Networks RN-41, with 31 | hardware flow control enabled 32 | * [USB Programming](/firmware/programming/usb.html): we 33 | made the [OpenLPC USB 34 | Bootloader](https://github.com/openxc/openlpc-USB_Bootloader) compatible with 35 | this board and made it more reliable across all major operating systems. 36 | * [Power](/electrical/design/power.html): up to 6A of 12v power can be passed 37 | through from the car, and USB can still be used when being powered by the car. 38 | 39 | 40 | ![Interface Block Diagram](/electrical/img/InterfaceBlockDiagram.svg "Interface Block Diagram") 41 | -------------------------------------------------------------------------------- /static/bootstrap/js/transition.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: transition.js v3.0.0 3 | * http://twbs.github.com/bootstrap/javascript.html#transitions 4 | * ======================================================================== 5 | * Copyright 2013 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ======================================================================== */ 19 | 20 | 21 | +function ($) { "use strict"; 22 | 23 | // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 24 | // ============================================================ 25 | 26 | function transitionEnd() { 27 | var el = document.createElement('bootstrap') 28 | 29 | var transEndEventNames = { 30 | 'WebkitTransition' : 'webkitTransitionEnd' 31 | , 'MozTransition' : 'transitionend' 32 | , 'OTransition' : 'oTransitionEnd otransitionend' 33 | , 'transition' : 'transitionend' 34 | } 35 | 36 | for (var name in transEndEventNames) { 37 | if (el.style[name] !== undefined) { 38 | return { end: transEndEventNames[name] } 39 | } 40 | } 41 | } 42 | 43 | // http://blog.alexmaccaw.com/css-transitions 44 | $.fn.emulateTransitionEnd = function (duration) { 45 | var called = false, $el = this 46 | $(this).one($.support.transition.end, function () { called = true }) 47 | var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 48 | setTimeout(callback, duration) 49 | return this 50 | } 51 | 52 | $(function () { 53 | $.support.transition = transitionEnd() 54 | }) 55 | 56 | }(window.jQuery); 57 | -------------------------------------------------------------------------------- /electrical/issues.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical 3 | title: Known Issues 4 | --- 5 | 6 | The version of the reference VI currently being shipped by Ford (in limited 7 | quantity) has v0.3 of the PCB, and there are no known electrical issues. 8 | 9 | For greater detail, see the [changelog in the source 10 | files (.xls)](/electrical/CHANGELOG.xls). 11 | 12 | #### v0.3 13 | 14 | * No known electrical issues. 15 | 16 | #### v0.2 17 | 18 | This was the first test run of the schematic. 19 | 20 | * Output Power Jack Polarity is incorrect - The output power jack should be 21 | configured such that Pin 1 (the keyed pin) is Ground, and Pin 2 is +12V. This 22 | is flipped on the R0.2 PCB. A custom cable was created to patch this issue, 23 | and is labeled `R0.2 Only`. Only use this cable with R0.2 prototypes, 24 | otherwise the KBoard TVS Diode D2 and/or the VI power switch IC7 25 | may be damaged or destroyed. 26 | * JTAG CLK line - the JTAG signal RTCK was disconnected on R0.2 boards. It has 27 | manually been replaced with a wire. Occasionally the additional capacitance of 28 | this wire can cause JTAG errors - try reducing the JTAG clock rate. 29 | * JTAG Ground noise - Occasionally JTAG errors can be caused by a ground loop 30 | between a USB JTAG adapter and the MicroUSB port on the VI. Try 31 | removing one or more connections to ground: IE, try powering the prototype 32 | from ONLY +5V USB verses the +12V OBD-II supply. 33 | * Bluetooth connection dropout - Under some circumstances, the RN-41 bluetooth 34 | chipset will lock up and drop an active bluetooth connetion when under heavy 35 | load: 36 | * The most common cause of this problem is software flow control: make sure 37 | to use the RTS and CTS pins for UART1. 38 | * The RN-41 configuration timer can also cause the RN-41 input buffer to 39 | fill. From the LPC1769, enter configuration mode by transmitting 40 | ```$$$```, disable the configuration timer with ```ST,0\r\n``` and then 41 | exit configuration mode by entering ```---\r\n```. Finally, power cycle 42 | the VI. The test firmware `rn42-passthrough` enables serial 43 | data to be relayed between UART0 (the 6-pin ISP header) and UART1 (the 44 | bluetooth interface). 45 | 46 | -------------------------------------------------------------------------------- /mechanical/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: Mechanical Design 4 | --- 5 | 6 | ![Assembly opened](/static/images/vi-open-bottom.jpg) 7 | 8 | The VI housing design consists of an opaque top and bottom, with a translucent 9 | diffuser piece at the end opposite the OBD-II connector, between two halves of 10 | the housing. The diffuser does a decent job of spreading the light from the 2 11 | RGB LEDs, although a light pipe may provide more consistent saturation. 12 | 13 | We've manufacturing this design succesfully with a MakerBot Replicator 2, 14 | SLA, and most recently, injection molded by contract manufacturers from Silicon Valley, the 15 | materials used were: 16 | 17 | * VI Top and Bottom: Bayblend T85 XF-901510 18 | * VI Difffuser: Lexan 3412R-131 (Natural 20% Glass Fiber PC) 19 | 20 | ![Assembly opened and separated](/static/images/vi-open-top.jpg) 21 | 22 | ## Sources 23 | 24 | The original master source files for the 3D design were created in CATIA, which 25 | unfortunately is neither open source nor affordable. We've output the design for 26 | the top of the enclosure, the bottom and the diffuser as STL (triangle) and STP 27 | (solid) files. 28 | 29 | The files are all [stored in a Git repository at 30 | GitHub](https://github.com/openxc/reference-vi/tree/gh-pages/mechanical) - 31 | pull requests are welcome! 32 | 33 | [![Top](/mechanical/img/OpenXC_VI_Top.png)](/mechanical/img/OpenXC_VI_Top.png) 34 | [![Bottom](/mechanical/img/OpenXC_VI_Bottom.png)](/mechanical/img/OpenXC_VI_Bottom.png) 35 | [![Diffuser](/mechanical/img/OpenXC_Diffuser.png)](/mechanical/img/OpenXC_Diffuser.png) 36 | 37 | * VI Enclosure Bottom 38 | * [2D Drawing(PDF)](/mechanical/OpenXC_VI_Bottom.PDF) 39 | * [STEP](/mechanical/VI_bottom.step) 40 | * VI Enclosure Top 41 | * [2D Drawing(PDF)](/mechanical/OpenXC_VI_Top.PDF) 42 | * [STEP](/mechanical/VI_top.step) 43 | * Diffuser 44 | * [2D Drawing(PDF)](/mechanical/OpenXC_Diffuser.PDF) 45 | * [STEP](/mechanical/VI_diffuser.step) 46 | 47 | ## Design for Manufacturing 48 | 49 | * Added 1.5 degree draft angles for top and bottom enclosures. 1.5 degree was chosen based on the selected surface texturing MT-11020. The only exception is the vertical wall where the OBD-II connector sits, which only has 0.5 degree of draft and does not have texturing. 50 | * 51 | -------------------------------------------------------------------------------- /electrical/design/bluetooth.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: Bluetooth Interface 4 | --- 5 | 6 | The [Roving Networks RN-41](http://www.rovingnetworks.com/products/RN41) was 7 | chosen to implement the Bluetooth interface for the VI because: 8 | 9 | * it supports the Serial Port Profile (SPP) configuration 10 | * it doesn't require implementing a Host/Controller Interface (HCI), keeping the 11 | MCU code simple 12 | - the stack is on the RN-41 13 | 14 | The only major design impact of the RN-41 is that it requires a large "keepout" 15 | area near the antenna of the module. In this area, there should be a minimal 16 | amount of traces or copper blocking the radio signal. The [RN-41 17 | Datasheet](https://cdn.sparkfun.com/datasheets/Wireless/Bluetooth/Bluetooth-RN-41-DS.pdf) 18 | illustrates the suggested keepout zone on page 9. Otherwise, the RN-41 is 19 | controlled with a serial UART bus with similar bitrates to the CAN data (230kbps 20 | - 1Mbps). 21 | 22 | In our testing we discovered that hardware flow control is necessary to fully 23 | saturate the bluetooth link. The firmware on the RN-41 [does not respond 24 | well](http://christopherpeplin.com/2013/07/26/uart-hardware-flow-control/) to 25 | buffer overruns - if data is written to the RN-41 faster than it can be sent 26 | over the bluetooth link, the module will eventually overflow and reset without 27 | warning. Adding the RTS and CTS lines to UART1 on the LPC1769 fixed this problem 28 | - the RN-41 will inform the MCU host when it's buffer is full. 29 | 30 | The tradeoff of a simplified Bluetooth module is that the implementation details 31 | of the SPP profile limit the throughput of the bluetooth link. While the 32 | underlying Enhanced Data Rate (EDR) bluetooth link can technically operate at 33 | 3Mbps, the asynchronous nature of SPP limits the RN-41 to 240kbps in slave mode. 34 | In our testing, the RN-41 only hit this speed for brief peak bursts. The 35 | sustained average speed was 202kbps. Future designs may consider using a more 36 | complicated Bluetooth chipset with an HCI interface implemented on the MCU for 37 | greater throughput. An example of a test run: 38 | 39 | 40 | 41 | * Average rate: 25.282 KB/s 42 | * Maximum speed: 30.185 KB/s 43 | * Minimum speed: 14.718 KB/s 44 | -------------------------------------------------------------------------------- /electrical/design/microcontroller.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: Microcontroller 4 | --- 5 | 6 | The VI was originally built around a ChipKit MAX32 development 7 | board, which used a PIC32MX795F512 processor. We chose to move away from this 8 | architecture due to the closed source nature of Microchip's C32 compiler for the 9 | PIC32. It was pleasant enough using the compiler packaged with the chipKIT IDE 10 | (MPIDE) but the licensing situation was unclear, particularly with the Microchip 11 | Peripheral libraries (MAL). 12 | 13 | Most other MCUs in the same performance category as the PIC32 device lie in the 14 | [ARM-Cortex-M family](http://en.wikipedia.org/wiki/ARM_Cortex-M), particularly 15 | the ARM Cortex-M3 core. Several major MCU manufacturers make Cortex-M3 devices 16 | (Atmel, NXP, STMicro, TI). The NXP LPC17XX line was selected due to it's 17 | excellent open-source compiler support, library support, and ease of 18 | programming. Many off-the-shelf open-source hardware designs exist for the 19 | LPC1768, and this encourages a large amount of community support and a wider 20 | variety of user-contributed libraries. 21 | 22 | The MCU system design was based around the [Blueboard 23 | LPC1768-H](http://shop.ngxtechnologies.com/product_info.php?products_id=65). 24 | This was done to allow firmware to be prototyped on an off-the-shelf open-source 25 | hardware. The hardware configuration is also compatible with the [MBED rapid 26 | prototyping board/environment](http://mbed.org/). The Clock, Power and USB 27 | subsystems are all equivalent. The JTAG interface was converted to the 10-pin 28 | ARM JTAG Mini format to reduce the PCB footprint of the normal large 20-pin JTAG 29 | connector. This results in a 12MHz external crystal oscillator stepped up to a 30 | 100MHz system clock. 31 | 32 | ### LPC1769 Data 33 | 34 | * [LPC1769FB100 Product Page](http://www.nxp.com/products/microcontrollers/cortex_m3/LPC1769FBD100.html) 35 | * [LPC176X Datasheet](http://www.nxp.com/documents/data_sheet/LPC1769_68_67_66_65_64_63.pdf) 36 | * [LPC17XX User Manual](http://www.nxp.com/documents/user_manual/UM10360.pdf) 37 | * [Blueboard LPC1768-H Product Page](http://shop.ngxtechnologies.com/product_info.php?products_id=65) 38 | * [Blueboard LPC1768-H Schematics V2](http://shop.ngxtechnologies.com/download/Schematics/BlueBoard/BB_LPC1768_H/Blueboard_lpc1768_H_V2.pdf) 39 | * [mbed LPC1768 schematics](http://mbed.org/media/uploads/chris/mbed-005.1.pdf) 40 | 41 | -------------------------------------------------------------------------------- /electrical/design/can.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: CAN Interface 4 | --- 5 | 6 | The CAN interface is acheived using an [NXP 7 | TJA1048](http://www.nxp.com/documents/data_sheet/TJA1048.pdf), a dual-channel 8 | CAN transceiver. This is a part recommended by Ford engineers for it's 9 | reliablity and robustness. The only hard requirement of this transceiver is 10 | that it have a standby mode, and some way to wake up the microcontroller when 11 | the CAN bus comes out of standby. Aside from the CAN signals, the TJA1048 also 12 | has one standby input per channel - pulling each line low will put it's 13 | respective CAN channel into standby mode. These are routed to P0.19 for CAN 14 | Channel 1, and P0.6 for CAN Channel 2. 15 | 16 | Some support electronics are required on the vehicle side of the CAN 17 | transceiver. D4 and D5 provide additional ESD protection against voltage spikes 18 | on the CAN line - each 19 | [PESD1CAN](http://www.nxp.com/documents/data_sheet/PESD1CAN.pdf) can provide up 20 | to 200W of peak dissipation and ESD protection up to 23kV. R1 and R2 provide 21 | termination resistance for the CAN Bus. If the VI is acting as a termiantion 22 | point for a bench testing CAN rig, these resistors may need to be connected 23 | across the HI and LO wires of each CAN bus. SJ1 and SJ2 are closed by default, 24 | enabling this termination. If this termination is not needed, the solder jumpers 25 | can be cut (see [this issue](https://github.com/openxc/reference-vi/issues/9)). 26 | Finally, each CAN signal has a 100pF bypass capacitor very close to the OBD 27 | connector, to shunt high frequency noise to ground. 28 | 29 | The CAN bus doesn't particularly require a high speed PCB design, since the rate 30 | is only 1Mbps at most and 500Kbps in practice. However, an attempt was made to 31 | maintain the characteristic 120 ohm differential impedance on the CAN lines 32 | (Note: this is a mistake in the design, as the termiation resistance should be 33 | left to the vehicle's bus in normal operation - see [issue #21](https://github.com/openxc/reference-vi/issues/21)). An 34 | attempt was also made to maintain a 45 mil guard band around each CAN bus, to 35 | keep high frequency switching transients from coupling onto the CAN bus. The 36 | guard band was also applied to the LPC1769 side of the CAN transciever, to keep 37 | the same transients out of the converted CAN signals. Since the layout is only 2 38 | layers and very crowded, this wasn't implemented perfectly, but seems to be 39 | within 85% coverage. The combination of these considerations means that the CAN 40 | interface should be highly resilient to noise and should limit signal distortion 41 | due to reflections and other transmission line phenomena. 42 | 43 | All CAN transceiver options we considered: 44 | 45 | * NXP TJA1040 (or other NXP model, but this is supposedly best for being able to 46 | suspend) 47 | * MCP2551 - Single CAN transceiver (not recommended need 2) 48 | * NXP TJA1048T - Dual-CAN transceiver (recommended) 49 | * about 10 cents more expensive than 2 single CAN transceivers 50 | -------------------------------------------------------------------------------- /electrical/design/usb.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: USB Interface 4 | --- 5 | 6 | USB is provided directly by the LPC1769 - no external transceiver or controller 7 | is necessary. A few external components are required to correctly enable the 8 | LPC1769 as a USB Device and can be found on [the LPC1769 9 | manual](https://www.nxp.com/docs/en/user-guide/UM10360.pdf). 10 | The USB_CONNECT line and associated circuitry was mirrored from the LPC1768-H 11 | Blueboard design so that USB bootloader firmware would be interoperable, and a 12 | few modifications were made for additional resilience and device compatibility: 13 | 14 | Diodes D2, D6 and D7 were added to ESD protect the USB lines. D2 is an [NXP 15 | PESD12VS1ULD](https://assets.nexperia.com/documents/data-sheet/PESD12VS1ULD.pdf) 16 | unidirectional ESD protection diode. D6 and D7 are [NXP 17 | PESD5V0X1BL](https://assets.nexperia.com/documents/data-sheet/PESD5V0X1BL.pdf) 18 | bidirectional ESD diodes. All protection diodes are specifically designed for 19 | the USB bus and have very low capacitance to avoid disrupting USB signals. 20 | 21 | Resistor R25 attempts to indicate to an attached USB OTG device that the CAN 22 | Translator can provide charging current. A specification exists on [ 23 | the USB Battery Charging Specification 24 | R1.2](https://www.usb.org/sites/default/files/USB_Battery_Charging_1.2.pdf) describing an 25 | Accessory Charger Adapter. This specification defines special resistance values 26 | on pin 4 of a USB OTG connector that should flag that the connected device is a 27 | charging device. However in practice very few devices actually honor this 28 | specification. It's totally up to the implementation of the portable tablet or 29 | smartphone whether or not they support charging while using the USB port as a 30 | USB Host. 31 | 32 | If a Male-Male USB Micro cable is used with the VI, this 33 | identification resistor will be readable by a connected USB OTG device. If the 34 | device is USB ACA compliant, it will successfully charge. If a Male-Male cable 35 | is unavailable, or if the device doesn't honor the USB ACA specification, a 36 | normal USB A to USB Micro cable can be used with a commonly-available USB OTG 37 | Host mode adapter. For example: 38 | 39 | * A Samsung Galaxy Note II with stock android firmware will honor the USB ACA 40 | profile [(from this forum post)](http://www.head-fi.org/t/595071/android-phones-and-usb-dacs/405#post_8748466) 41 | * A Motorola Droid Razr with stock firmware and a normal USB OTG Host cable will 42 | charge (tested) 43 | * A Google Nexus 7 tablet will not charge from the USB OTG port when host mode 44 | is enabled without a custom firmware (tested) 45 | 46 | USB signals require high speed PCB routing to avoid signal integrity issues, 47 | since the bitrates are high (11Mbps - 480Mbps). Unfortunately with a 2 layer 48 | PCB, the trace widths required to obtain the ideal 90 ohm differential impedance 49 | for a USB line would be unfeasibly wide. To compensate for this fact, the USB 50 | connector was located extremely close (~300 mils) to the LPC1769 USB pins. A 51 | guard band was used around the USB lines and tightly coupled to the ground 52 | plane. The ground plane underneath the USB signals was kept clear so the ground 53 | loop would be kept small and transient ground currents would avoid coupling into 54 | the USB signal. 55 | -------------------------------------------------------------------------------- /electrical/design/power.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical-design 3 | title: Power Supply 4 | --- 5 | 6 | The VI uses two heavy-duty low dropout linear regulators to 7 | convert the unpredictable +12V automotive power source to the +5V and +3.3V 8 | rails needed by the MCU and related ICs. Incoming power is protected from 9 | overvoltage by D3, a [SMBJ16CA](http://www.fairchildsemi.com/ds/SM/SMBJ16CA.pdf) 10 | Transient Voltage Suppressor (TVS) diode. D3 will protect the interface from 11 | any voltage over 19.7V (Vbr). The power regulators can handle up to 12 | 40V. Reverse voltage is 13 | protected by D1. Both regulators do not require any additional current or 14 | temperature protection - they can safely drive into a short circuit at 15 | temperatures up to 150 degrees C, and will limit current if they become too hot. 16 | Plenty of bulk and bypass capacitance has been provided to absorb automotive 17 | power transients. 18 | 19 | The regulators are cascaded such that the +5V rail supplies the +3.3V rail. The 20 | TLE4284DV33 has a maximum voltage drop of 1.4V, so it can be safely powered by 21 | any source above 4.7V. While this puts additional load on the +5V rail, it also 22 | allows the interface to be powered either by the OBD-II connector or the 23 | MicroUSB port. Both regulators can deliver current up to 1.6A. Current budget: 24 | 25 | * 5V regulator capacity: 1600mA 26 | * USB Charging Limit (fuse): 1000mA 27 | * RN-41 average TX rate: 60mA 28 | * LPC1769 Base consumption @ 100MHz: 50mA 29 | * LPC1769 peripherals (2xCAN+2xUART): 3mA 30 | * Both RGB LEDs on at full: 60mA 31 | * TJA1048T both channels dominant: 140mA 32 | * Total: 1313mA 33 | 34 | This yields a headroom of ~300mA when all peripherals are active and a Tablet is 35 | charging at 1A. 36 | 37 | ### Power Input/Output 38 | 39 | The VI has the following power connections: 40 | 41 | * OBD-II Automotive Power: Input @ 12V 42 | * External Accessory Power Connector: Output @ 12V up to 5A 43 | * USB Micro Connector: Input OR Output @ 5V up to 1A 44 | 45 | The external accessory power connector is controlled by a [TPS2421-2 46 | power switch with 47 | internal MOSFET](http://www.ti.com/lit/ds/symlink/tps2421-2.pdf). This allows 48 | the external accessory power to be disabled when the vehicle is turned 49 | off, as well as 50 | providing current protection. The power switch has an active 5A limit, and will 51 | actively attempt to re-engage power when the limit is tripped ("retry on 52 | fault"). 53 | 54 | The USB micro connector is directly connected to the +5V bus through a fuse. 55 | The lack of a diode means that the connected USB device can either consume or 56 | supply current. If a PC is connected to the USB micro connector, it will power 57 | the 3.3V regulator and the +5V regulator will be bypassed. If an Android tablet 58 | is connected that supports USB OTG charging, it will be allowed to consume +5V 59 | power. A resettable fuse (F1) has been added to protect the VI 60 | from a bad USB cable or USB host. The fuse is a [Bourns 61 | MF-MSMF110/16-2](http://www.bourns.com/pdfs/mfmsmf.pdf). The fuse will 62 | automatically reset when power is removed and the fuse is allowed to cool off. 63 | This has an added downside of temperature dependence - the fuse can only pass 64 | the full 1A of current up to 40 degrees C. Above that temperature the limit 65 | slowly decreases - see the datasheet for a thermal derating chart. 66 | 67 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | OpenXC Vehicle Interface Reference Design 2 | ========================================= 3 | 4 | This repository is a part of the [OpenXC][] project. 5 | 6 | This repository contains the documentation and open source design files for the 7 | OpenXC vehicle interface reference design, originally created by Ford. 8 | 9 | ## Documentation 10 | 11 | The documentation is in the form of simple website, written in Markdown with the 12 | HTML generated with [Jekyll][jekyll]. 13 | 14 | [jekyll]: http://jekyllrb.com/ 15 | 16 | ### Organization 17 | 18 | * the `*.mkd` files are the source for the documentation website - they're very 19 | readable as plain text files, too, if you're just digging through the 20 | repository. 21 | * `static/` contains the static JavaScript, CSS and images for the site. 22 | * `_layouts/default.html` contains the main layout for the site. There's only 1 23 | layout for now, although there could others in the future. 24 | * `electrical/` contains the electrical design files and documentation. 25 | * `mechanical/` contains the mechanical housing design files and documentation. 26 | * `assembly/` contains documentation to support final assembly at a fabrication 27 | house. 28 | 29 | ### Local development 30 | 31 | If you do not have ruby and RubyGems installed (you already do on OS X), see 32 | below. 33 | 34 | Assuming you have Ruby and RubyGems installed: 35 | 36 | $ gem install rdiscount jekyll 37 | 38 | Then, assuming you have Python's `pip` installed: 39 | 40 | $ pip install pygments 41 | 42 | Then run the local development server: 43 | 44 | $ cd reference-vi 45 | reference-vi/ $ jekyll serve -w 46 | 47 | and point your browser to http://localhost:4000. 48 | 49 | Jekyll uses the templates in the repository to generate a static html version of 50 | the site. The static version is always dumped in the `_site` subdirectory in the 51 | repository - this is *not* committed, since it's automatically generated. The 52 | `-w` flag turns on auto-recompilation, so anytime you change a file it will 53 | regenerate whatever files have changed, so you just need to refresh the browser 54 | to see your latest updates. 55 | 56 | ### Installing Ruby and RubyGems 57 | 58 | **Cygwin in Windows** 59 | 60 | TODO is this necessary anymore? 61 | 62 | Install the `ruby`, `make`, `gcc`, `libiconv` and `zlib` packages in 63 | Cygwin using the `setup.exe` 64 | you downloaded earlier. Download the RubyGems TGZ package from 65 | http://rubygems.org/pages/download and put it in `C:\cygwin\home\`. Fire up Cygwin and run this: 67 | 68 | $ tar -xzf rubygems*.tgz 69 | $ cd rubygems* 70 | $ ruby setup.rb 71 | 72 | Jekyll depends on posix-spawn v0.3.6, but that has a problem with compiling in 73 | Cygwin. The latest development version works, though, so install that gem from 74 | source before continuing: 75 | 76 | $ git clone https://github.com/rtomayko/posix-spawn.git 77 | $ cd posix-spawn 78 | $ gem build posix-spawn.gemspec 79 | $ gem install posix-spawn-0.3.6.gem 80 | 81 | If you didn't get any errors, return to the top of this section and install 82 | jekyll. 83 | 84 | ### Going Live 85 | 86 | The documentation site is hosted on GitHub pages, so deploying is as simple as 87 | commiting your changes to the `gh-pages` branch and pushing to GitHub. It gets 88 | regenerated within a minute or two, and then it's live. This of course means 89 | don't push anything in the `gh-pages` branch that isn't 100% done! 90 | 91 | ## License 92 | 93 | Copyright (c) 2013 Ford Motor Company 94 | 95 | The electrical and mechanical designs in this repository are available under the 96 | [Creative Commons Attribution 4.0 97 | International](http://creativecommons.org/licenses/by/4.0/deed.en_US) license. 98 | 99 | [OpenXC]: http://openxcplatform.com 100 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | {{ page.title }} 8 | 9 | 10 | 11 | 12 | 14 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 57 | 58 |
59 |
60 | {{ content }} 61 |
62 | 63 |
64 | 71 |
72 |
73 | 74 | 76 | 77 | 78 | 79 | 80 | 89 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.TXT: -------------------------------------------------------------------------------- 1 | % 2 | M48 3 | M72 4 | T01C0.0140 5 | T02C0.0200 6 | T03C0.0290 7 | T04C0.0330 8 | T05C0.0360 9 | T06C0.0400 10 | T07C0.0460 11 | T08C0.0472 12 | T09C0.0530 13 | T10C0.1000 14 | T11C0.1180 15 | % 16 | T01 17 | X39380Y29660 18 | X39600Y30250 19 | X40100Y30250 20 | X40420Y30530 21 | X40520Y29950 22 | X40970Y30750 23 | X42200Y31150 24 | X40420Y32830 25 | T02 26 | X25370Y21810 27 | X26470Y21810 28 | X27900Y21660 29 | X29210Y21860 30 | X29600Y22030 31 | X30550Y22030 32 | X31410Y22540 33 | X31310Y23340 34 | X31310Y24140 35 | X31310Y24940 36 | X31310Y25740 37 | X31310Y26540 38 | X31760Y26910 39 | X30830Y27640 40 | X31030Y28070 41 | X30800Y28550 42 | X29350Y27350 43 | X29340Y26850 44 | X29620Y25860 45 | X29620Y25360 46 | X29620Y24760 47 | X29620Y24260 48 | X29000Y25650 49 | X28500Y25750 50 | X28160Y26410 51 | X26300Y26850 52 | X26300Y27350 53 | X26260Y27940 54 | X26260Y28740 55 | X26260Y29440 56 | X26900Y29850 57 | X27500Y29950 58 | X28100Y29950 59 | X29380Y30250 60 | X29380Y30950 61 | X29380Y31650 62 | X28700Y31620 63 | X29380Y32350 64 | X29380Y33160 65 | X29690Y33850 66 | X30310Y34440 67 | X30990Y34650 68 | X31590Y34650 69 | X32350Y34850 70 | X31190Y33350 71 | X30690Y32850 72 | X32500Y32250 73 | X32960Y32600 74 | X32460Y31580 75 | X32450Y31120 76 | X32500Y30350 77 | X32950Y30510 78 | X33700Y30240 79 | X34200Y29050 80 | X34600Y28850 81 | X35030Y28650 82 | X35500Y28880 83 | X35930Y29160 84 | X37210Y28030 85 | X38650Y27700 86 | X41560Y29350 87 | X42050Y29400 88 | X42500Y28950 89 | X43000Y28950 90 | X43500Y28950 91 | X42050Y31920 92 | X42400Y32250 93 | X42010Y32680 94 | X40420Y32050 95 | X40690Y33620 96 | X42060Y35000 97 | X43060Y35940 98 | X43160Y36540 99 | X41450Y37000 100 | X40310Y35660 101 | X39890Y36110 102 | X39440Y36060 103 | X39860Y37070 104 | X40240Y37360 105 | X40240Y37860 106 | X40240Y38390 107 | X40200Y38850 108 | X40700Y38850 109 | X41040Y38490 110 | X41200Y38990 111 | X39697Y38850 112 | X39200Y38850 113 | X38830Y38390 114 | X38720Y37580 115 | X37650Y37990 116 | X37440Y37560 117 | X37100Y37250 118 | X36700Y37550 119 | X36320Y37150 120 | X35820Y37930 121 | X35800Y38850 122 | X37800Y39150 123 | X38200Y39850 124 | X35400Y36750 125 | X34920Y36730 126 | X33990Y35960 127 | X33100Y36850 128 | X32190Y36850 129 | X32200Y36350 130 | X31490Y36950 131 | X31490Y37550 132 | X30900Y37350 133 | X30490Y38450 134 | X30050Y38450 135 | X29620Y38450 136 | X29100Y37950 137 | X28210Y38720 138 | X28600Y40250 139 | X28600Y40750 140 | X29850Y40850 141 | X30290Y40850 142 | X30720Y40850 143 | X31600Y40850 144 | X32100Y40850 145 | X29310Y36050 146 | X27290Y35350 147 | X26100Y35250 148 | X25400Y35750 149 | X25100Y34550 150 | X24400Y34550 151 | X25600Y34050 152 | X26300Y32350 153 | X26300Y31650 154 | X26260Y30940 155 | X26260Y30240 156 | X25200Y30050 157 | X25200Y29250 158 | X25200Y30850 159 | X25200Y31650 160 | X23000Y34450 161 | X23950Y37090 162 | X22910Y37270 163 | X22930Y38850 164 | X23420Y39040 165 | X23950Y39040 166 | X25480Y37110 167 | X23630Y28180 168 | X24230Y27880 169 | X25200Y26850 170 | X25200Y26150 171 | X25240Y25450 172 | X24200Y24950 173 | X25540Y23890 174 | X26340Y23730 175 | X26400Y25450 176 | X32720Y28080 177 | X33800Y28140 178 | X38700Y22090 179 | X35800Y21650 180 | X34420Y21650 181 | X33950Y21650 182 | X33470Y21650 183 | X33000Y21650 184 | X43200Y34040 185 | X43600Y34460 186 | T03 187 | X33800Y29550 188 | X29650Y34476 189 | X29650Y35264 190 | X29690Y23420 191 | T04 192 | X26940Y37366 193 | X26940Y39334 194 | T05 195 | X42500Y37180 196 | X42500Y36560 197 | X42500Y35940 198 | X42500Y35320 199 | X42500Y27180 200 | X42500Y26560 201 | X42500Y25940 202 | X42500Y25320 203 | T06 204 | X41700Y28450 205 | X40700Y28450 206 | X39700Y28450 207 | X38700Y28450 208 | X37700Y28450 209 | X36700Y28450 210 | X31300Y35250 211 | X31300Y36250 212 | X33410Y38500 213 | X34590Y38500 214 | T07 215 | X40565Y36273 216 | X43394Y39101 217 | T08 218 | X41599Y40680 219 | X39001Y40680 220 | T09 221 | X24630Y36762 222 | X23370Y36762 223 | X23370Y35187 224 | X24630Y35187 225 | X24630Y33612 226 | X23370Y33612 227 | X23370Y32037 228 | X24630Y32037 229 | X24630Y30463 230 | X23370Y30463 231 | X23370Y28888 232 | X24630Y28888 233 | X24630Y27313 234 | X23370Y27313 235 | X23370Y25738 236 | X24630Y25738 237 | T10 238 | X23700Y22450 239 | X42800Y22450 240 | X42800Y40050 241 | X23700Y40050 242 | T11 243 | X34000Y40200 244 | M30 245 | -------------------------------------------------------------------------------- /assembly/testing.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: assembly 3 | title: Testing Plan 4 | --- 5 | 6 | A test jig can be created using [Spring Pogo 7 | Pins](https://www.adafruit.com/products/394). At a minimum, the test jig should 8 | contain pogo pins and mounting holes at the PCB locations outlined by [this 9 | spreadsheet](/assembly/pogo_location.xls). A rooted linux host is 10 | necessary for this test - perhaps an embedded android device like a raspberyPi, 11 | Beagleboard or pcDuino. 12 | 13 | 1. Connect OBD cable, JTAG and Micro USB cables to the board under test 14 | 1. Apply 12V power to board 15 | 1. Measure all power rails, verify they are within 0.1V of target 16 | 1. Remove +12V power, attach +5V supply to the Micro USB port 17 | 1. Re-verify power rails are within range 18 | 1. Re-apply 12V power to board 19 | 1. Deploy test firmware to board, examine OpenOCD output for errors 20 | 1. Take snapshot of logic levels and compare to expected values: BT_RTS, 21 | BT_CTS, BT_RESET, BT_CONN, DOCK_PWR_EN, DOCK_PWR_OUT, USB_CON, ISP_EN, 22 | USBBOOT_EN, DEBUG_TX, DEBUG_RX, RESET, DOCK_PWR_FLT, DOCK_PWR_PG 23 | 1. Boot into ISP bootloader (Pull ISP_EN low, Toggle RESET, Release ISP_EN) and 24 | retrieve LPC1769 serial number 25 | 1. (ensure that test firmware configures the baud rate of the RN-41 device, see 26 | [RN-41 configuration](/firmware/rn41.html)) 27 | 1. Execute short bluetooth bandwidth test (data-test.py --bandwidth --size 5000 28 | --plot). Capture results. Take snapshot of BT_RTS, BT_CTS, BT_RESET, 29 | BT_CONN lines upon error 30 | 1. Execute short USB bandwidth test (data-test.py --usb --bandwidth --size 31 | 50000 --plot). Capture results. Take snapshot of USB_CON, +5V upon error 32 | 1. Execute short CAN bandwdith test (cantx.py --plot). Capture results. Take 33 | snapshot CANA_HI, CANA_LO, CANB_HI, CANB_LO upon error. 34 | 1. Assert Dock power output. Measure voltage at connector output, verify it is 35 | within 0.5V of target. 36 | 1. De-assert Dock power output, re-measure, verify connector output is 1V or 37 | below. 38 | 1. Deploy [Emulator Firmware](https://github.com/openxc/vi-firmware/releases) from the openxc-vi-firmware package and connect to the OpenXC VI with an test Android device. 39 | 2. Use the OpenXC Enabler App on the Android device to verify emulated data is being streamed to Android from the OpenXC VI. 40 | 1. Deploy production firmware to board 41 | 1. Connect to USB, verify production firmware is successfully running 42 | 43 | ## Validation Criteria 44 | 45 | **Bluetooth** 46 | 47 | 1. Maintain a baud rate of at least 115200 for a sustained 5MB transfer over 48 | Bluetooth with no transmission errors 49 | 1. Push varying amounts of data for 12 hours and record all disconnections and 50 | transmissions errors 51 | 1. Run through 100 connect/disconnect cycles, looking for failures to connect, 52 | or any instance in which the Bluetooth stack on the CAN Translator becomes 53 | out of sync. 54 | 55 | **USB** 56 | 57 | 1. Maintain a transfer rate of at least 100KB/s for a sustained 5MB transfer 58 | over USB with no transmission errors 59 | 1. Push varying amounts of data for 12 hours and record all disconnections and 60 | transmissions errors 61 | 1. Verify the CAN translator can be powered via USB when not connected to an 62 | OBD-II port 63 | 1. Verify that the CAN translator can be powered by the vehicle through the 64 | OBD-II port and also be plugged into an Android device via USB while not 65 | having conflicting current. 66 | 67 | **CAN** 68 | 69 | 1. Verify that CAN messages can be received from a vehicle or test harness, 70 | and that the stream can be maintained for 1 hour without interruption. 71 | 1. Verify that a stream of CAN messages can be written out to the CAN bus for 72 | 1 hour 73 | 74 | **Power** 75 | 76 | 1. Test that MCU can be put to sleep and power draw goes very low 77 | 1. Test that MCU can wakeup on a CAN interrupt and get back to full power, 78 | record time to wakeup (time to wakeup is on the order of microseconds) 79 | 1. External power socket should provide steady 12v 80 | 1. External power socket should not provide any power when the MCU goes into 81 | sleep mode 82 | 83 | **Lighting** 84 | 85 | 1. RGB LEDs must be controllable from software 86 | 87 | **Pysical** 88 | 89 | 1. OBD-II connector can be attached to a vehicle with a reasonable amount of 90 | force 91 | 1. OBD-II connector is robustly connected to the port 92 | 1. OBD-II connector takes a reasonable amount of effort to detach from the 93 | vehicle, but the process does not overly strain the housing or PCB 94 | 1. The 12v power cable can be attached and detached with a reasonable amount 95 | of force, and resists being knocked out of the socket by accident 96 | 97 | **Mechanical Design** 98 | 99 | 1. Designed for injection molding --> Constant wall thickness, appropriate 100 | minimum thickness material (0.050" for ABS), draft angles, slide 101 | consideration 102 | 1. Robust attachment and mating features between housing pieces 103 | 1. Appropriate fit in specified vehicles (Focus, Flex, F-150, Explorer) 104 | -------------------------------------------------------------------------------- /electrical/io.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: electrical 3 | title: Pins, Ports, Inputs and Outputs 4 | --- 5 | 6 | Several headers and jumpers have been exposed for development purposes. A 7 | header has been provided to access UART0 on the LPC1769 - this can be used for 8 | serial debug as well as [ISP programming](/firmware/programming/isp.html). The 9 | standard [JTAG interface](/firmware/programming/jtag.html) has also been exposed 10 | through a 10-pin ARM JTAG Mini connector. Two buttons have also been added to 11 | the board - one resets the LPC1769, and the other allows the LPC1769 to enter a 12 | [USB bootloader](/firmware/programming/usb.html) if available. 13 | 14 | ### Parts Layout 15 | 16 | ![VI Ports](/static/images/vi-ports.jpg) 17 | 18 | ### Inputs/Outputs 19 | 20 | #### Buttons 21 | 22 | * S1 (RESET) - Pressing this button will reset the LPC1769 (it will not reset 23 | the RN-41 chipset) 24 | * S2 (PROG) - This button engages a USB Bootloader. Hold down S2 while pressing 25 | S1 to enter the bootloader. 26 | 27 | ![Interface Headers Top](/electrical/img/headers_top.jpg "Interface board - headers on top side") 28 | 29 | #### Headers and jumpers 30 | 31 | * JP1 (HOST PWR) - Shorting this jumper will allow the board to either charge an 32 | upstream USB device, or be powered by it. 33 | * JP2 (ISP_EN) - Shorting this jumper will place the LPC1769 in ISP Bootloader 34 | mode when it is reset. In ISP Bootloader mode, user code is not run - J3 can 35 | only be used to deploy firmware over serial. 36 | * J3 (ISP) - The debug serial port (UART0) which can also be used for ISP 37 | programming (see JP2). 38 | * J5 (JTAG) - This is a 50 mil pitch 10-pin ARM Mini JTAG interface. An adapter 39 | can be used to connect the standard 100 mil 20-pin JTAG connector. 40 | 41 | ![Interface Headers Bottom](/electrical/img/headers_bottom.jpg "Interface board - headers on bottom side") 42 | 43 | #### Solder Jumpers 44 | 45 | * SJ1, SJ2 - These are used to engage the 120 ohm termination resistor for CAN 46 | interfaces A and B respectively. If being used in a test bench without a full 47 | CAN network, you probably want these enabled. It may be simpler and more 48 | reversible to add the resistors to the OBD-II cable, instead. Note: The 49 | current version has an error in the design and this functionality is reversed - the 50 | resistors are enabled by default, and are disabled with the solder jumper. The 51 | termiation resistance should be left to the vehicle's bus in normal operation 52 | - see [issue #21](https://github.com/openxc/reference-vi/issues/21)) 53 | * SJ3, SJ4 - These switch the CAN B channel between the Diagnostic Medium Speed 54 | and Multimedia CAN buses exposed by the OBD-II connector on Ford vehicles. 55 | They are each shorted towards the PCB edge, enabling the Diagnostic interface 56 | by default. 57 | * SJ5 - This connects the DTR line of the ISP header (J3) to the LPC1769 RESET 58 | line. This can be used by an ISP programmer to automatically reset the LPC1769 59 | for programming. In practice, this can accidentally hold the LPC1769 in 60 | reset, so this jumper should be OPENED if J3 is used. 61 | * SJ6 - This disconnects the RN-41 reset pin from the BT_RST GPIO pin on the 62 | LPC1769. This is normally closed, and should only be opened if the RN-41 needs 63 | to be put into reset without the LPC1769. 64 | 65 | ### GPIO Pin List 66 | 67 | A list of GPIO pins used on the LPC1769 68 | 69 | #### Port 0 70 | 71 | * P0.2 - ISP/Debug UART: TX 72 | * P0.3 - ISP/Debug UART: RX 73 | * P0.4 - CAN Channel B: RX 74 | * P0.5 - CAN Channel B: TX 75 | * P0.6 - CAN Channel B: Enable (HIGH = Normal Mode, LOW = Standby Mode) 76 | * P0.15 - Bluetooth UART: RX 77 | * P0.16 - Bluetooth UART: TX 78 | * P0.17 - Bluetooth Enable: (HIGH = RN-41 is enabled, LOW = RN-41 is in RESET) 79 | * P0.18 - Bluetooth Connection: INPUT - Will go high when bluetooth host is 80 | connected 81 | * P0.19 - CAN Channel A: Enable (HIGH = Normal Mode, LOW = Standby Mode) 82 | * P0.21 - CAN Channel A: RX 83 | * P0.22 - CAN Channel A: TX 84 | * P0.29 - USB D+ 85 | * P0.30 - USB D- 86 | 87 | #### Port 1 88 | 89 | * P1.18 - LED4 (Right LED) Green Channel 90 | * P1.20 - LED4 (Right LED) Blue Channel 91 | * P1.21 - LED4 (Right LED) Red Channel 92 | * P1.23 - LED1 (Left LED) Green Channel 93 | * P1.24 - LED1 (Left LED) Blue Channel 94 | * P1.26 - LED1 (Left LED) Red Channel 95 | * P1.30 - USB VBUS: Connected to USB +5V pin 96 | 97 | #### Port 2 98 | 99 | * P2.2 - Bluetooth UART: RTS (LOW when RN-41 is ready for data, HIGH when RN-41 100 | serial buffer is full) 101 | * P2.7 - Bluetooth UART: CTS (LOW when LPC1769 is ready for data, HIGH when 102 | LPC1769 serial buffer is full) 103 | * P2.9 - USB CONNECT: Enables USB Pullup (LOW when USB unused, HIGH to signal 104 | USB interface is ready) 105 | * P2.10 - ISP ENABLE: When HIGH, User code runs on next RESET. When LOW, ISP 106 | Serial bootloader runs on next RESET. 107 | * P2.12 - USB Bootloader ENABLE: When HIGH, User code runs on next RESET. When 108 | LOW, USB bootloader runs on next RESET 109 | * P2.13 - Power output enable (Active Low): Output power port enabled when LOW 110 | 111 | 112 | -------------------------------------------------------------------------------- /assembly/electrical/index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: assembly 3 | title: PCB Assembly Sources 4 | --- 5 | 6 | ### Assembly Files 7 | 8 | The assembly files are generated from the [schematics and board layout source 9 | files](/electrical/sources/index.html) which were created in CADsoft EAGLE. 10 | 11 | The files are all [stored in a Git repository at 12 | GitHub](https://github.com/openxc/reference-vi/tree/gh-pages/assembly/electrical). 13 | 14 | * [Board Layout DXF](/assembly/electrical/vehicle-interface.dxf) 15 | * [Gerber files](https://github.com/openxc/reference-vi/raw/gh-pages/assembly/electrical) 16 | * .top Top Copper Layer 17 | * .smt Top Soldermask 18 | * .slk Top Silkscreen 19 | * .tsp Top Solderpaste 20 | * .bot Bottom Copper Layer 21 | * .smb Bottom Soldermask 22 | * .bsk Bottom Silkscreen 23 | * .bsp Bottom Solderpaste 24 | * .oln PCB Outline 25 | * .drd Excellon Drill Data 26 | * .drl Basic Drill tool information 27 | * .dri Extended Drill tool information 28 | 29 | ### Special Assembly Instructions 30 | 31 | * See NOTES: on ASSY drawings for general notes 32 | * Ensure no excess solder is wicked into J0 (USB Micro Connector). Verify a USB 33 | Micro cable can successfully connect 34 | * Ensure J0 (USB Micro Connector) is completely flush to the PCB before/after 35 | reflow. Ensure pins at rear of connector are not lifted off pads. 36 | * Apply epoxy to J0 for additional structural rigidity 37 | * Ensure J2 (OBD-II connector) pins are flush with PCB before soldering 38 | * Ensure J2 (OBD-II connector) is horizontal to PCB before soldering 39 | * LED1 and LED4 (through hole RGB LEDs) must be bent 90 degrees towards front 40 | edge of PCB 41 | * Ensure both through hole electrolytic capacitors (C2 and C3) are flush against 42 | PCB before soldering. 43 | * Ensure part Q2 (12MHz crystal) is oriented such that the long dimension 44 | follows the centerline on the silkscreen layer. 45 | 46 | ### Assembly file output instructions 47 | 48 | If you modify the schematics and need to regenerate the assembly files, follow 49 | these instructions. 50 | 51 | * Verify silkscreen and PCB Frame artwork reflects accurate revision 52 | * Update layers 125 and 126 - text on top of each component should identify the 53 | part designator 54 | * Delete all content on layer (144) DrillLegend 55 | * run "drillegend.ulp": Use all default values, click OK. 56 | * Reselect layer (144) and move the newly created drill legend back onto the 57 | frame 58 | * Verify SSC-EAGLE-2Lyr_v1.0.0.3.dru is loaded as current design rules file 59 | * Turn on all copper and stopmask layers, turn off silkscreen layers (skip 60 | silkscreen error checking, silkscreen will be clipped by assembly house) 61 | * Preform DRC/ERC check 62 | * run "drillcfg.ulp": select "Inch" as output format. Click OK. Save. 63 | * run "excellon.cam" in the CAM processor, click "Process Job" 64 | * run "2LPlus-Sunstone.cam" in the CAM processor, click "Process Job" 65 | * Double check all gerber files using a gerber file viewer (like gerbv). 66 | * Deselect all layers, select only the following layers: (17)Pads, (18)Vias, 67 | (20)Dimension, (21)tPlace, (22)bPlace, (23)tOrigins, (24)bOrigins, 68 | (49)Reference, (51)tDocu, (52)bDocu, (125)tAssy, (126)bAssy 69 | * run "dxf.ulp": deselect "Fill Areas", make sure "mm" is selected under the 70 | "units" header. Save the DXF file. 71 | * Deselect all layers, select only the following layers: (17)Pads, (18)Vias, 72 | (20)Dimension, (21)tPlace, (23)tOrigins, (48)Document, (49)Reference, 73 | (51)tDocu, (125)tAssy, (144)DrillLegend 74 | * Hit print (Ctrl+P), select "Print to File (PDF)" as the printer, select 75 | vehicle-interface_ASSY_TOP.pdf, paper size A4, scale factor 1. Click OK. 76 | * Deselect all layers, select only the following layers: (17)Pads, (18)Vias, 77 | (20)Dimension, (22)bPlace, (24)bOrigins, (48)Document, (49)Reference, 78 | (52)bDocu, (126)bAssy, (144)DrillLegend 79 | * Hit print (Ctrl+P), select "Print to File (PDF)" as the printer, select 80 | vehicle-interface_ASSY_BOT.pdf, paper size A4, scale factor 1. Click OK. 81 | * Deselect all layers, select only the following layers: (1)Top, (16)Bottom, 82 | (17)Pads, (18)Vias, (20)Dimension, (21)tPlace, (22)bPlace, (25)tNames, 83 | (51)tDocu, (52)bDocu 84 | * Zoom in so that PCB is centered in the screen and fills the window as much as 85 | possible. 86 | * Select File->Export->Image. Select vehicle-interface.brd.png. Set 87 | "Resolution" to 600. Set "Area" to "Window". 88 | * In the schematic window, hit print (Ctrl+P), select "Print to File (PDF)" as 89 | the printer, select vehicle-interface.sch.pdf, paper size A4, scale factor 1, 90 | page limit 1 Click OK. 91 | * In the schematic window, select File->Export->Partlist. Select 92 | "vehicle-interface.parts.txt". Click OK. 93 | * Manually compare "vehicle-interface.parts.txt" to "vehicle-interface.bom.xls". 94 | Make sure the two lists are consistent. 95 | * Open "CHANGELOG.xls". Update the file to reflect the new revision. 96 | * Create a zip archive with the following files (at least): 97 | * vehicle-interface.pdf 98 | * vehicle-interface.brd.png 99 | * vehicle-interface_ASSY_TOP.pdf 100 | * vehicle-interface_ASSY_BOT.pdf 101 | * vehicle-interface.tsp 102 | * vehicle-interface.top 103 | * vehicle-interface.smt 104 | * vehicle-interface.smb 105 | * vehicle-interface.slk 106 | * vehicle-interface.oln 107 | * vehicle-interface.gpi 108 | * vehicle-interface.dxf 109 | * vehicle-interface.drl 110 | * vehicle-interface.dri 111 | * vehicle-interface.drd 112 | * vehicle-interface.bsp 113 | * vehicle-interface.bsk 114 | * vehicle-interface.bot 115 | * vehicle-interface.bom.xls 116 | * vehicle-interface.sch 117 | * vehicle-interface.brd 118 | * CHANGELOG.xls 119 | -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.GBS: -------------------------------------------------------------------------------- 1 | G75* 2 | %MOIN*% 3 | %OFA0B0*% 4 | %FSLAX24Y24*% 5 | %IPPOS*% 6 | %LPD*% 7 | %AMOC8* 8 | 5,1,8,0,0,1.08239X$1,22.5* 9 | % 10 | %ADD10C,0.1060*% 11 | %ADD11R,0.0350X0.1160*% 12 | %ADD12R,0.0710X0.0710*% 13 | %ADD13C,0.0710*% 14 | %ADD14C,0.1240*% 15 | %ADD15C,0.0660*% 16 | %ADD16R,0.0660X0.0660*% 17 | %ADD17C,0.0855*% 18 | %ADD18R,0.0310X0.0560*% 19 | %ADD19C,0.0600*% 20 | %ADD20C,0.0800*% 21 | %ADD21R,0.0217X0.0591*% 22 | %ADD22C,0.0769*% 23 | %ADD23C,0.0560*% 24 | %ADD24C,0.0420*% 25 | %ADD25C,0.0360*% 26 | %ADD26C,0.0510*% 27 | D10* 28 | X023700Y022450D03* 29 | X042800Y022450D03* 30 | X042800Y040050D03* 31 | X023700Y040050D03* 32 | D11* 33 | X035600Y033550D03* 34 | X036100Y033550D03* 35 | X036600Y033550D03* 36 | X037100Y033550D03* 37 | X037600Y033550D03* 38 | X037600Y031950D03* 39 | X037100Y031950D03* 40 | X036600Y031950D03* 41 | X036100Y031950D03* 42 | X035600Y031950D03* 43 | D12* 44 | X029650Y034476D03* 45 | X026940Y037366D03* 46 | D13* 47 | X026940Y039334D03* 48 | X029650Y035264D03* 49 | D14* 50 | X034000Y040200D03* 51 | D15* 52 | X033410Y038500D03* 53 | D16* 54 | X034590Y038500D03* 55 | D17* 56 | X024630Y036762D03* 57 | X023370Y036762D03* 58 | X023370Y035187D03* 59 | X024630Y035187D03* 60 | X024630Y033612D03* 61 | X023370Y033612D03* 62 | X023370Y032037D03* 63 | X024630Y032037D03* 64 | X024630Y030463D03* 65 | X023370Y030463D03* 66 | X023370Y028888D03* 67 | X024630Y028888D03* 68 | X024630Y027313D03* 69 | X023370Y027313D03* 70 | X023370Y025738D03* 71 | X024630Y025738D03* 72 | D18* 73 | X024480Y024050D03* 74 | X024800Y024050D03* 75 | X025120Y024050D03* 76 | X023820Y024050D03* 77 | X023500Y024050D03* 78 | X023180Y024050D03* 79 | D19* 80 | X042500Y025320D03* 81 | X042500Y025940D03* 82 | X042500Y026560D03* 83 | X042500Y027180D03* 84 | X042500Y035320D03* 85 | X042500Y035940D03* 86 | X042500Y036560D03* 87 | X042500Y037180D03* 88 | D20* 89 | X043394Y039101D03* 90 | X040565Y036273D03* 91 | X031300Y036250D03* 92 | X031300Y035250D03* 93 | X036700Y028450D03* 94 | X037700Y028450D03* 95 | X038700Y028450D03* 96 | X039700Y028450D03* 97 | X040700Y028450D03* 98 | X041700Y028450D03* 99 | D21* 100 | X040812Y039627D03* 101 | X040556Y039627D03* 102 | X040300Y039627D03* 103 | X040044Y039627D03* 104 | X039788Y039627D03* 105 | D22* 106 | X039001Y040680D03* 107 | X041599Y040680D03* 108 | D23* 109 | X032700Y037450D03* 110 | X032700Y035450D03* 111 | X029700Y036450D03* 112 | X029700Y039450D03* 113 | X030700Y039450D03* 114 | X031700Y039450D03* 115 | X025700Y040450D03* 116 | X023700Y038450D03* 117 | X023700Y034450D03* 118 | X025700Y033450D03* 119 | X027700Y028450D03* 120 | X031500Y027450D03* 121 | X035700Y027450D03* 122 | X036700Y027450D03* 123 | X037700Y027450D03* 124 | X036700Y022450D03* 125 | X035700Y022450D03* 126 | X034700Y022450D03* 127 | X033700Y022450D03* 128 | X032700Y022450D03* 129 | X026900Y023450D03* 130 | X025700Y022450D03* 131 | X023700Y026450D03* 132 | D24* 133 | X025370Y021810D03* 134 | X026470Y021810D03* 135 | X027900Y021660D03* 136 | X029210Y021860D03* 137 | X029600Y022030D03* 138 | X030550Y022030D03* 139 | X031410Y022540D03* 140 | X031310Y023340D03* 141 | X031310Y024140D03* 142 | X031310Y024940D03* 143 | X031310Y025740D03* 144 | X031310Y026540D03* 145 | X031760Y026910D03* 146 | X030830Y027640D03* 147 | X031030Y028070D03* 148 | X030800Y028550D03* 149 | X029350Y027350D03* 150 | X029340Y026850D03* 151 | X029620Y025860D03* 152 | X029620Y025360D03* 153 | X029620Y024760D03* 154 | X029620Y024260D03* 155 | X029000Y025650D03* 156 | X028500Y025750D03* 157 | X028160Y026410D03* 158 | X026300Y026850D03* 159 | X026300Y027350D03* 160 | X026260Y027940D03* 161 | X026260Y028740D03* 162 | X026260Y029440D03* 163 | X026900Y029850D03* 164 | X027500Y029950D03* 165 | X028100Y029950D03* 166 | X029380Y030250D03* 167 | X029380Y030950D03* 168 | X029380Y031650D03* 169 | X028700Y031620D03* 170 | X029380Y032350D03* 171 | X029380Y033160D03* 172 | X029690Y033850D03* 173 | X030310Y034440D03* 174 | X030990Y034650D03* 175 | X031590Y034650D03* 176 | X032350Y034850D03* 177 | X031190Y033350D03* 178 | X030690Y032850D03* 179 | X032500Y032250D03* 180 | X032960Y032600D03* 181 | X032460Y031580D03* 182 | X032450Y031120D03* 183 | X032500Y030350D03* 184 | X032950Y030510D03* 185 | X033700Y030240D03* 186 | X034200Y029050D03* 187 | X034600Y028850D03* 188 | X035030Y028650D03* 189 | X035500Y028880D03* 190 | X035930Y029160D03* 191 | X037210Y028030D03* 192 | X038650Y027700D03* 193 | X041560Y029350D03* 194 | X042050Y029400D03* 195 | X042500Y028950D03* 196 | X043000Y028950D03* 197 | X043500Y028950D03* 198 | X042050Y031920D03* 199 | X042400Y032250D03* 200 | X042010Y032680D03* 201 | X040420Y032050D03* 202 | X040690Y033620D03* 203 | X042060Y035000D03* 204 | X043060Y035940D03* 205 | X043160Y036540D03* 206 | X041450Y037000D03* 207 | X040310Y035660D03* 208 | X039890Y036110D03* 209 | X039440Y036060D03* 210 | X039860Y037070D03* 211 | X040240Y037360D03* 212 | X040240Y037860D03* 213 | X040240Y038390D03* 214 | X040200Y038850D03* 215 | X040700Y038850D03* 216 | X041040Y038490D03* 217 | X041200Y038990D03* 218 | X039697Y038850D03* 219 | X039200Y038850D03* 220 | X038830Y038390D03* 221 | X038720Y037580D03* 222 | X037650Y037990D03* 223 | X037440Y037560D03* 224 | X037100Y037250D03* 225 | X036700Y037550D03* 226 | X036320Y037150D03* 227 | X035820Y037930D03* 228 | X035800Y038850D03* 229 | X037800Y039150D03* 230 | X038200Y039850D03* 231 | X035400Y036750D03* 232 | X034920Y036730D03* 233 | X033990Y035960D03* 234 | X033100Y036850D03* 235 | X032190Y036850D03* 236 | X032200Y036350D03* 237 | X031490Y036950D03* 238 | X031490Y037550D03* 239 | X030900Y037350D03* 240 | X030490Y038450D03* 241 | X030050Y038450D03* 242 | X029620Y038450D03* 243 | X029100Y037950D03* 244 | X028210Y038720D03* 245 | X028600Y040250D03* 246 | X028600Y040750D03* 247 | X029850Y040850D03* 248 | X030290Y040850D03* 249 | X030720Y040850D03* 250 | X031600Y040850D03* 251 | X032100Y040850D03* 252 | X029310Y036050D03* 253 | X027290Y035350D03* 254 | X026100Y035250D03* 255 | X025400Y035750D03* 256 | X025100Y034550D03* 257 | X024400Y034550D03* 258 | X025600Y034050D03* 259 | X026300Y032350D03* 260 | X026300Y031650D03* 261 | X026260Y030940D03* 262 | X026260Y030240D03* 263 | X025200Y030050D03* 264 | X025200Y029250D03* 265 | X025200Y030850D03* 266 | X025200Y031650D03* 267 | X023000Y034450D03* 268 | X023950Y037090D03* 269 | X022910Y037270D03* 270 | X022930Y038850D03* 271 | X023420Y039040D03* 272 | X023950Y039040D03* 273 | X025480Y037110D03* 274 | X023630Y028180D03* 275 | X024230Y027880D03* 276 | X025200Y026850D03* 277 | X025200Y026150D03* 278 | X025240Y025450D03* 279 | X024200Y024950D03* 280 | X025540Y023890D03* 281 | X026340Y023730D03* 282 | X026400Y025450D03* 283 | X032720Y028080D03* 284 | X033800Y028140D03* 285 | X038700Y022090D03* 286 | X035800Y021650D03* 287 | X034420Y021650D03* 288 | X033950Y021650D03* 289 | X033470Y021650D03* 290 | X033000Y021650D03* 291 | X043200Y034040D03* 292 | X043600Y034460D03* 293 | D25* 294 | X040420Y032830D03* 295 | X040970Y030750D03* 296 | X040420Y030530D03* 297 | X040100Y030250D03* 298 | X039600Y030250D03* 299 | X039380Y029660D03* 300 | X040520Y029950D03* 301 | X042200Y031150D03* 302 | D26* 303 | X033800Y029550D03* 304 | X029690Y023420D03* 305 | M02* 306 | -------------------------------------------------------------------------------- /firmware/programming/usb.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: programming 3 | title: USB Programming 4 | --- 5 | 6 | All of the reference VI units manufactured so far are pre-programmed with a USB 7 | bootloader (the OpenXC fork of the [OpenLPC USB 8 | Bootloader](https://github.com/openxc/openlpc-USB_Bootloader)). This means you 9 | can re-flash the device using USB, with no extra hardware required. 10 | 11 |

12 | To verify the VI was flashed correctly, we recommend trying the 13 | Android "smoke test" to make sure everything's working. 14 | You can also test from a regular computer with Python, but it's a 15 | bit more involved if you're not already familiar with the tools. 16 |

17 | 18 |

19 | 20 |

21 | 22 |
23 | 24 |
25 |
26 |

27 | 29 | Mac OS X 30 | 31 |

32 |
33 |
34 |
35 |

Use a paper clip or pencil to hold down the programming button on 36 | the VI. While holding down the programming button, connect a 37 | micro-USB cable to the VI and to the computer you will use to do the 38 | programming - an LED on the VI will flash green, and then you can 39 | let go of the button. 40 |

41 | 42 |

43 | 44 |

45 | 46 |

47 | If your VI has the v1.1 bootloader, i.e. it does 48 | have an OpenXC sticker on the housing, you can copy the new 49 | firmware over in Finder. Browse to the LPC1759 drive that appears 50 | when you run it in bootloader mode, delete the firmware.bin file and 51 | copy your new firmware file .bin over (the new filename doesn't 52 | matter). 53 |

54 | 55 |

Eject the LPC1759 drive and unplug the VI. It's flashed!

56 | 57 | 58 |

Eject the LPC1759 drive and unplug the VI. It's flashed!

59 | 60 |

61 | Note: The LPC1759/firmware.bin file you see in Finder is 62 | just a placeholder. 63 | To check if your firmware is properly flashed, plug in the VI via 64 | USB and try running openxc-control version 65 | from the Terminal 66 | to get the firmware version. 67 |

68 | 69 |
70 |
71 |
72 | 73 |
74 |
75 |

76 | 78 | Linux 79 | 80 |

81 |
82 |
83 |
84 | 85 |

Use a paper clip or pencil to hold down the programming button on the VI. While 86 | holding down the programming button, connect a micro-USB cable to the VI and to 87 | the computer you will use to do the programming - an LED on the VI will flash 88 | green, and then you can let go of the button. 89 |

90 | 91 |

92 | 93 |

94 | 95 |

96 | If your VI has the v1.1 bootloader, i.e. it does 97 | have an OpenXC sticker on the housing, you can copy the new 98 | firmware over in any file manager. Browse to the LPC1759 drive that 99 | appears when you run it in bootloader mode, delete the firmware.bin 100 | file and copy your new firmware file .bin over (the new filename 101 | doesn't matter). Eject the LPC1759 drive and unplug the VI. It's 102 | flashed! 103 |

104 | 105 |
106 |
107 |
108 | 109 |
110 |
111 |

112 | 114 | Windows 115 | 116 |

117 |
118 |
119 |
120 | 121 |

Use a paper clip or pencil to hold down the programming button on the VI. While 122 | holding down the programming button, connect a micro-USB cable to the VI and to 123 | the computer you will use to do the programming - an LED on the VI will flash 124 | green, and then you can let go of the button. 125 |

126 | 127 |

128 | 129 |

130 | 131 |

The VI will appear as a typical USB drive named 132 | LPC1759 - open it.

133 | 134 |

135 | 136 |

137 | 138 |

139 | The drive will have a firmware.bin file - delete it. 140 |

141 | 142 |

143 | 144 |

145 | 146 |

147 | Drag and drop the new firmware .bin file onto the drive. 148 |

149 | 150 |

151 | 152 |

153 | 154 |

155 | Eject or unmount the drive. When the drive is safe to remove, unplug the USB 156 | cable. 157 |

158 | 159 |

160 | 161 |

162 | 163 |

164 | The next time you power up the VI (without pressing the programming button) it 165 | will be running the new firmware. 166 |

167 |

168 | Note: The LPC1759/firmware.bin file you see in Windows 169 | Explorer is just a placeholder. 170 | To check if your firmware is properly flashed, plug in the VI via 171 | USB and try running openxc-control version 172 | from the command line 173 | to get the firmware version. 174 |

175 |
176 |
177 |
178 | 179 |
180 | -------------------------------------------------------------------------------- /index.mkd: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | title: OpenXC Vehicle Interface Reference Design 4 | section: overview 5 | --- 6 | 7 |

What is OpenXC?

8 | 9 | [OpenXC](http://openxcplatform.com) is an API to your car - by installing a small hardware module 10 | to read and translate metrics from a car's internal network, the data becomes 11 | accessible from most Android applications using the OpenXC library. You can 12 | start making vehicle-aware applications that have better interfaces based on 13 | context, can minimize distraction while driving, are integrated with other 14 | connected services, and can offer you more insight into your car's operation. 15 | This website is the documentation for a reference design of an OpenXC-compatible 16 | [Vehicle Interface](http://openxcplatform.com/vehicle-interface/index.html) - 17 | for more information on the platform in general, visit 18 | [openxcplatform.com](http://openxcplatform.com). 19 | 20 | ![Vehicle Interface](/static/images/vi-surface.png) 21 | ![Vehicle Interface Opened Up](/static/images/vi-packaging.png) 22 | 23 | The [Vehicle Interface](http://openxcplatform.com/vehicle-interface/index.html) 24 | (VI) is piece of hardware that connects to the car's CAN bus, translates 25 | proprietary CAN messages to the standard [OpenXC message format](http://openxcplatform.com/vehicle-interface/output-format.html) 26 | and sends the output over a common interface like USB to a [host device](http://openxcplatform.com/host-devices/hardware.html) - 27 | this particular implementation has USB and Bluetooth. 28 | 29 | Ford created this design and manufactured a small quantity to seed the developer 30 | community. If you have an idea for an OpenXC application and this hardware would 31 | help, make sure there aren't [any known issues 32 | with 33 | the fit](https://github.com/openxc/openxcplatform.com/wiki/Vehicle-interface-physical-fit-compatibility) 34 | for the reference VI in your car. 35 | 36 | ![Vehicle Interface Open](/static/images/vi-opening.jpg) 37 | ![Vehicle Interface Installed in Vehicle](/static/images/vi-installed-in-vehicle.jpg) 38 | 39 |

Quick Start

40 | 41 |
42 | 43 | 48 | 49 |
50 | 51 |
52 | 53 |

The VI needs to be programmed with firmware before you can get data 54 | from a car. You can use the emulator 55 | firmware (zip file) to test the data connection to a host device 57 | (a computer, smartphone or tablet). To get data from a real car, grab one 58 | of the other 59 | available firmwares. 60 |

61 | 62 |

Once you've downloaded a firmware file (it should be a version for the 63 | "FORDBOARD" and have the ".bin" extension) programming the VI is simple - 64 | follow the USB programming 65 | instructions. 66 |

67 | 68 |
69 | 70 |
71 | 72 |

Besides using binary 73 | firmware for app developers, you can build your own code to run on the 74 | VI. You can use the official OpenXC VI 75 | firmware (the source for most binary firmware, e.g. those from Ford) 76 | or start from scratch with a blank project.

77 | 78 |

Alternatively, you can use one of a few lower level programming options 79 | (some even allow in-circuit debugging). More details are available in the 80 | firmware page. 81 |

82 | 83 |
84 | 85 |
86 | 87 |

This site contains complete documentation of the hardware, 88 | design motivations, fabrication and testing plans. Every component is 89 | released as open source hardware and the source files are available in the 90 | openxc/reference-vi 91 | GitHub repository (along with the contents of this website). 92 |

93 | 94 |
95 | 96 |
97 | 98 |
99 | 100 |
101 | 102 |

What is this vehicle interface?

103 | 104 |

105 | The particular unit is a reference design for a "dongle" style vehicle interface 106 | that connects directly to the diagnostic port with no cable. Ford created this 107 | design as an iteration from the original, chipKIT-based vehicle 108 | interface with the goal to: 109 |

110 | 111 | 120 | 121 |

122 | This streamlined vehicle interface uses a ARM Cortex-M3 microcontroller (NXP's 123 | LPC1769), a dual-channel CAN transceiver from NXP, the RN-41 Bluetooth 124 | module from Roving 125 | Networks and includes a micro-USB port. The design also includes a 12v port 126 | (with a Molex connector) to power an external device from the car, and this port 127 | can be shut off with the car to avoid battery drain. 128 |

129 | 130 |

131 | We also designed and prototyped a plastic housing for the board that allows it 132 | to be easily gripped and attached/detached from the OBD-II port underneath the 133 | steering wheel. 134 |

135 | 136 |

137 | The device is not as compact as it could be, primarily because we design it to 138 | use only a 2-layer PCB (to make it more accessible for hobbyists). Depending on 139 | the placement and angle of the OBD-II port in your vehicle, the VI may protrude 140 | too much - we recommend one of the many available OBD-II 142 | extension 143 | cables if that's the case. 144 |

145 | 146 |

147 | The current BOM total cost for the electrical components in 1,000 unit 148 | quantities is around $45. 149 |

150 | 151 | 152 |

Features

153 | 154 | 165 | 166 | VI Ports 167 | 168 | 169 |

Contributors

170 | 171 |

172 | The electrical reference design was created by Bug Labs, contracted by 173 | Ford and in 174 | collaboration with Ford Research and Innovation engineers in both Palo 176 | Alto, CA and Dearborn, MI. For a full list of the 177 | contributors to this project, see the AUTHORS file. 179 |

180 | 181 | 182 |

License

183 | 184 |

185 | Copyright (c) 2013 Ford Motor Company 186 |

187 | 188 |

189 | This vehicle interface is open source hardware. The electrical and mechanical 190 | designs in this repository are available under the Creative Commons Attribution 192 | 4.0 International license. 193 |

-------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.GTP: -------------------------------------------------------------------------------- 1 | G75* 2 | %MOIN*% 3 | %OFA0B0*% 4 | %FSLAX24Y24*% 5 | %IPPOS*% 6 | %LPD*% 7 | %AMOC8* 8 | 5,1,8,0,0,1.08239X$1,22.5* 9 | % 10 | %ADD10R,0.0591X0.0114*% 11 | %ADD11R,0.0114X0.0591*% 12 | %ADD12R,0.0276X0.0354*% 13 | %ADD13R,0.0354X0.0276*% 14 | %ADD14R,0.0315X0.0472*% 15 | %ADD15R,0.0315X0.0630*% 16 | %ADD16R,0.0630X0.0315*% 17 | %ADD17R,0.0315X0.0315*% 18 | %ADD18R,0.0394X0.0551*% 19 | %ADD19R,0.0630X0.1181*% 20 | %ADD20R,0.2283X0.2441*% 21 | %ADD21R,0.0945X0.0945*% 22 | %ADD22R,0.0472X0.0315*% 23 | %ADD23R,0.0689X0.0709*% 24 | %ADD24R,0.0551X0.0276*% 25 | %ADD25R,0.0413X0.0512*% 26 | %ADD26R,0.0472X0.0236*% 27 | %ADD27R,0.0315X0.0354*% 28 | %ADD28R,0.0700X0.0280*% 29 | %ADD29R,0.0906X0.1220*% 30 | %ADD30R,0.0630X0.0906*% 31 | %ADD31R,0.0906X0.0630*% 32 | %ADD32R,0.0787X0.0472*% 33 | %ADD33R,0.0157X0.0276*% 34 | %ADD34R,0.0276X0.0197*% 35 | %ADD35R,0.0710X0.0630*% 36 | %ADD36R,0.0134X0.0102*% 37 | %ADD37R,0.0102X0.0134*% 38 | D10* 39 | X033550Y030588D03* 40 | X033550Y030785D03* 41 | X033550Y030981D03* 42 | X033550Y031178D03* 43 | X033550Y031375D03* 44 | X033550Y031572D03* 45 | X033550Y031769D03* 46 | X033550Y031966D03* 47 | X033550Y032163D03* 48 | X033550Y032359D03* 49 | X033550Y032556D03* 50 | X033550Y032753D03* 51 | X033550Y032950D03* 52 | X033550Y033147D03* 53 | X033550Y033344D03* 54 | X033550Y033541D03* 55 | X033550Y033737D03* 56 | X033550Y033934D03* 57 | X033550Y034131D03* 58 | X033550Y034328D03* 59 | X033550Y034525D03* 60 | X033550Y034722D03* 61 | X033550Y034919D03* 62 | X033550Y035115D03* 63 | X033550Y035312D03* 64 | X039850Y035312D03* 65 | X039850Y035115D03* 66 | X039850Y034919D03* 67 | X039850Y034722D03* 68 | X039850Y034525D03* 69 | X039850Y034328D03* 70 | X039850Y034131D03* 71 | X039850Y033934D03* 72 | X039850Y033737D03* 73 | X039850Y033541D03* 74 | X039850Y033344D03* 75 | X039850Y033147D03* 76 | X039850Y032950D03* 77 | X039850Y032753D03* 78 | X039850Y032556D03* 79 | X039850Y032359D03* 80 | X039850Y032163D03* 81 | X039850Y031966D03* 82 | X039850Y031769D03* 83 | X039850Y031572D03* 84 | X039850Y031375D03* 85 | X039850Y031178D03* 86 | X039850Y030981D03* 87 | X039850Y030785D03* 88 | X039850Y030588D03* 89 | D11* 90 | X039062Y029800D03* 91 | X038865Y029800D03* 92 | X038669Y029800D03* 93 | X038472Y029800D03* 94 | X038275Y029800D03* 95 | X038078Y029800D03* 96 | X037881Y029800D03* 97 | X037684Y029800D03* 98 | X037487Y029800D03* 99 | X037291Y029800D03* 100 | X037094Y029800D03* 101 | X036897Y029800D03* 102 | X036700Y029800D03* 103 | X036503Y029800D03* 104 | X036306Y029800D03* 105 | X036109Y029800D03* 106 | X035913Y029800D03* 107 | X035716Y029800D03* 108 | X035519Y029800D03* 109 | X035322Y029800D03* 110 | X035125Y029800D03* 111 | X034928Y029800D03* 112 | X034731Y029800D03* 113 | X034535Y029800D03* 114 | X034338Y029800D03* 115 | X034338Y036100D03* 116 | X034535Y036100D03* 117 | X034731Y036100D03* 118 | X034928Y036100D03* 119 | X035125Y036100D03* 120 | X035322Y036100D03* 121 | X035519Y036100D03* 122 | X035716Y036100D03* 123 | X035913Y036100D03* 124 | X036109Y036100D03* 125 | X036306Y036100D03* 126 | X036503Y036100D03* 127 | X036700Y036100D03* 128 | X036897Y036100D03* 129 | X037094Y036100D03* 130 | X037291Y036100D03* 131 | X037487Y036100D03* 132 | X037684Y036100D03* 133 | X037881Y036100D03* 134 | X038078Y036100D03* 135 | X038275Y036100D03* 136 | X038472Y036100D03* 137 | X038669Y036100D03* 138 | X038865Y036100D03* 139 | X039062Y036100D03* 140 | D12* 141 | X039344Y036590D03* 142 | X039856Y036590D03* 143 | X042144Y034550D03* 144 | X042656Y034550D03* 145 | X042356Y033750D03* 146 | X041844Y033750D03* 147 | X041844Y033150D03* 148 | X042356Y033150D03* 149 | X042944Y032950D03* 150 | X043456Y032950D03* 151 | X043456Y033550D03* 152 | X042944Y033550D03* 153 | X041356Y031950D03* 154 | X041344Y031450D03* 155 | X041856Y031450D03* 156 | X041856Y030850D03* 157 | X041856Y030350D03* 158 | X041856Y029850D03* 159 | X041344Y029850D03* 160 | X041344Y030350D03* 161 | X041344Y030850D03* 162 | X040844Y031950D03* 163 | X038256Y029240D03* 164 | X037744Y029240D03* 165 | X036856Y029220D03* 166 | X036344Y029220D03* 167 | X033256Y029050D03* 168 | X033256Y028550D03* 169 | X032744Y028550D03* 170 | X032744Y029050D03* 171 | X032744Y029550D03* 172 | X033256Y029550D03* 173 | X029076Y026390D03* 174 | X028564Y026390D03* 175 | X024856Y029650D03* 176 | X024344Y029650D03* 177 | X023656Y029650D03* 178 | X023144Y029650D03* 179 | X023194Y032850D03* 180 | X023706Y032850D03* 181 | X024144Y032850D03* 182 | X024656Y032850D03* 183 | X023956Y034530D03* 184 | X023444Y034530D03* 185 | X030944Y038350D03* 186 | X031456Y038350D03* 187 | X032114Y035310D03* 188 | X032626Y035310D03* 189 | X037244Y040750D03* 190 | X037756Y040750D03* 191 | X023656Y025050D03* 192 | X023144Y025050D03* 193 | X022944Y024150D03* 194 | X023456Y024150D03* 195 | X038010Y021646D03* 196 | X038522Y021646D03* 197 | D13* 198 | X042500Y027894D03* 199 | X043000Y027894D03* 200 | X043500Y027894D03* 201 | X043500Y028406D03* 202 | X043000Y028406D03* 203 | X042500Y028406D03* 204 | X043300Y034994D03* 205 | X043300Y035506D03* 206 | X041300Y035994D03* 207 | X041300Y036506D03* 208 | X040700Y037594D03* 209 | X040700Y038106D03* 210 | X041500Y037994D03* 211 | X042000Y037994D03* 212 | X042500Y037994D03* 213 | X042500Y038506D03* 214 | X042000Y038506D03* 215 | X041500Y038506D03* 216 | X039800Y038106D03* 217 | X039300Y038106D03* 218 | X039300Y037594D03* 219 | X039800Y037594D03* 220 | X037280Y038494D03* 221 | X037280Y039006D03* 222 | X037700Y039564D03* 223 | X037700Y040076D03* 224 | X036300Y039006D03* 225 | X036300Y038494D03* 226 | X035900Y037406D03* 227 | X035900Y036894D03* 228 | X033160Y036406D03* 229 | X032660Y036406D03* 230 | X032660Y035894D03* 231 | X033160Y035894D03* 232 | X032100Y038294D03* 233 | X032100Y038806D03* 234 | X027800Y036606D03* 235 | X027800Y036094D03* 236 | X032930Y031976D03* 237 | X032930Y031464D03* 238 | X024900Y024306D03* 239 | X024900Y023794D03* 240 | X029900Y022956D03* 241 | X029900Y022444D03* 242 | D14* 243 | X040846Y032550D03* 244 | X041554Y032550D03* 245 | X024854Y035950D03* 246 | X024146Y035950D03* 247 | X023654Y035950D03* 248 | X022946Y035950D03* 249 | D15* 250 | X033002Y027448D03* 251 | X033474Y027448D03* 252 | X033946Y027448D03* 253 | X034419Y027448D03* 254 | X034891Y027448D03* 255 | X035364Y027448D03* 256 | X035836Y027448D03* 257 | X036309Y027448D03* 258 | X036781Y027448D03* 259 | X037254Y027448D03* 260 | X037726Y027448D03* 261 | X038198Y027448D03* 262 | X038198Y022252D03* 263 | X037726Y022252D03* 264 | X037254Y022252D03* 265 | X036781Y022252D03* 266 | X036309Y022252D03* 267 | X035836Y022252D03* 268 | X035364Y022252D03* 269 | X034891Y022252D03* 270 | X034419Y022252D03* 271 | X033946Y022252D03* 272 | X033474Y022252D03* 273 | X033002Y022252D03* 274 | D16* 275 | X031899Y023227D03* 276 | X031899Y023630D03* 277 | X031899Y024102D03* 278 | X031899Y024574D03* 279 | X031899Y025126D03* 280 | X031899Y025598D03* 281 | X031899Y026070D03* 282 | X031899Y026473D03* 283 | X039301Y024220D03* 284 | X039301Y023590D03* 285 | X039301Y022960D03* 286 | D17* 287 | X037395Y021650D03* 288 | X036805Y021650D03* 289 | X038300Y040295D03* 290 | X038300Y040885D03* 291 | D18* 292 | X025900Y021817D03* 293 | X025526Y022683D03* 294 | X026274Y022683D03* 295 | X026284Y024447D03* 296 | X025536Y024447D03* 297 | X025910Y025313D03* 298 | D19* 299 | X026902Y030740D03* 300 | X028698Y030740D03* 301 | X028698Y036240D03* 302 | X026902Y036240D03* 303 | D20* 304 | X027800Y033413D03* 305 | X027800Y027913D03* 306 | D21* 307 | X024966Y038050D03* 308 | X023234Y038050D03* 309 | D22* 310 | X026080Y037524D03* 311 | X026080Y036816D03* 312 | X026080Y036404D03* 313 | X026080Y035696D03* 314 | X026100Y034804D03* 315 | X026100Y034096D03* 316 | X026100Y033604D03* 317 | X026100Y032896D03* 318 | D23* 319 | X026048Y038350D03* 320 | X027552Y038350D03* 321 | D24* 322 | X041300Y033745D03* 323 | X041300Y033155D03* 324 | D25* 325 | X040936Y034557D03* 326 | X041664Y034557D03* 327 | X041664Y035463D03* 328 | X040936Y035463D03* 329 | D26* 330 | X029102Y025250D03* 331 | X029102Y024750D03* 332 | X029102Y024250D03* 333 | X029102Y023750D03* 334 | X029102Y023250D03* 335 | X029102Y022750D03* 336 | X029102Y022250D03* 337 | X026898Y022250D03* 338 | X026898Y022750D03* 339 | X026898Y023250D03* 340 | X026898Y023750D03* 341 | X026898Y024250D03* 342 | X026898Y024750D03* 343 | X026898Y025250D03* 344 | D27* 345 | X036800Y039117D03* 346 | X036426Y039944D03* 347 | X037174Y039944D03* 348 | D28* 349 | X031348Y039900D03* 350 | X031348Y040400D03* 351 | X031348Y039400D03* 352 | X031348Y038900D03* 353 | X029252Y038900D03* 354 | X029252Y039400D03* 355 | X029252Y039900D03* 356 | X029252Y040400D03* 357 | D29* 358 | X030300Y039650D03* 359 | D30* 360 | X043000Y032190D03* 361 | X043000Y029710D03* 362 | D31* 363 | X034840Y037450D03* 364 | X032360Y037450D03* 365 | D32* 366 | X027800Y031860D03* 367 | X027800Y030600D03* 368 | D33* 369 | X039682Y039270D03* 370 | X039958Y039270D03* 371 | X040302Y039270D03* 372 | X040578Y039270D03* 373 | D34* 374 | X037720Y038707D03* 375 | X037720Y038393D03* 376 | D35* 377 | X030200Y037310D03* 378 | X030200Y036190D03* 379 | D36* 380 | X039831Y029942D03* 381 | X039831Y029758D03* 382 | X040169Y029850D03* 383 | X040711Y031068D03* 384 | X040711Y031252D03* 385 | X041049Y031160D03* 386 | D37* 387 | X040992Y030179D03* 388 | X040808Y030179D03* 389 | X040900Y029841D03* 390 | M02* 391 | -------------------------------------------------------------------------------- /static/bootstrap/css/bootstrap-theme.min.css: -------------------------------------------------------------------------------- 1 | .btn-default,.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{text-shadow:0 -1px 0 rgba(0,0,0,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075)}.btn-default:active,.btn-primary:active,.btn-success:active,.btn-info:active,.btn-warning:active,.btn-danger:active,.btn-default.active,.btn-primary.active,.btn-success.active,.btn-info.active,.btn-warning.active,.btn-danger.active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn:active,.btn.active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,0%,#e6e6e6,100%);background-image:-moz-linear-gradient(top,#fff 0,#e6e6e6 100%);background-image:linear-gradient(to bottom,#fff 0,#e6e6e6 100%);background-repeat:repeat-x;border-color:#e0e0e0;border-color:#ccc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0)}.btn-default:active,.btn-default.active{background-color:#e6e6e6;border-color:#e0e0e0}.btn-primary{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;border-color:#2d6ca2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.btn-primary:active,.btn-primary.active{background-color:#3071a9;border-color:#2d6ca2}.btn-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;border-color:#419641;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.btn-success:active,.btn-success.active{background-color:#449d44;border-color:#419641}.btn-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;border-color:#eb9316;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.btn-warning:active,.btn-warning.active{background-color:#ec971f;border-color:#eb9316}.btn-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;border-color:#c12e2a;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.btn-danger:active,.btn-danger.active{background-color:#c9302c;border-color:#c12e2a}.btn-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;border-color:#2aabd2;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.btn-info:active,.btn-info.active{background-color:#31b0d5;border-color:#2aabd2}.thumbnail,.img-thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus,.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.navbar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fff),to(#f8f8f8));background-image:-webkit-linear-gradient(top,#fff,0%,#f8f8f8,100%);background-image:-moz-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);background-repeat:repeat-x;border-radius:4px;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#fff8f8f8',GradientType=0);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075);box-shadow:inset 0 1px 0 rgba(255,255,255,0.15),0 1px 5px rgba(0,0,0,0.075)}.navbar .navbar-nav>.active>a{background-color:#f8f8f8}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,0.25)}.navbar-inverse{background-image:-webkit-gradient(linear,left 0,left 100%,from(#3c3c3c),to(#222));background-image:-webkit-linear-gradient(top,#3c3c3c,0%,#222,100%);background-image:-moz-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c',endColorstr='#ff222222',GradientType=0)}.navbar-inverse .navbar-nav>.active>a{background-color:#222}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,0.25)}.navbar-static-top,.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}.alert{text-shadow:0 1px 0 rgba(255,255,255,0.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05);box-shadow:inset 0 1px 0 rgba(255,255,255,0.25),0 1px 2px rgba(0,0,0,0.05)}.alert-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#c8e5bc));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#c8e5bc,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);background-repeat:repeat-x;border-color:#b2dba1;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffc8e5bc',GradientType=0)}.alert-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#b9def0));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#b9def0,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);background-repeat:repeat-x;border-color:#9acfea;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffb9def0',GradientType=0)}.alert-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#f8efc0));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#f8efc0,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);background-repeat:repeat-x;border-color:#f5e79e;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fff8efc0',GradientType=0)}.alert-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#e7c3c3));background-image:-webkit-linear-gradient(top,#f2dede,0%,#e7c3c3,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);background-repeat:repeat-x;border-color:#dca7a7;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffe7c3c3',GradientType=0)}.progress{background-image:-webkit-gradient(linear,left 0,left 100%,from(#ebebeb),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#ebebeb,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb',endColorstr='#fff5f5f5',GradientType=0)}.progress-bar{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3071a9));background-image:-webkit-linear-gradient(top,#428bca,0%,#3071a9,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3071a9 100%);background-image:linear-gradient(to bottom,#428bca 0,#3071a9 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3071a9',GradientType=0)}.progress-bar-success{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5cb85c),to(#449d44));background-image:-webkit-linear-gradient(top,#5cb85c,0%,#449d44,100%);background-image:-moz-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c',endColorstr='#ff449d44',GradientType=0)}.progress-bar-info{background-image:-webkit-gradient(linear,left 0,left 100%,from(#5bc0de),to(#31b0d5));background-image:-webkit-linear-gradient(top,#5bc0de,0%,#31b0d5,100%);background-image:-moz-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff31b0d5',GradientType=0)}.progress-bar-warning{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f0ad4e),to(#ec971f));background-image:-webkit-linear-gradient(top,#f0ad4e,0%,#ec971f,100%);background-image:-moz-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e',endColorstr='#ffec971f',GradientType=0)}.progress-bar-danger{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9534f),to(#c9302c));background-image:-webkit-linear-gradient(top,#d9534f,0%,#c9302c,100%);background-image:-moz-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f',endColorstr='#ffc9302c',GradientType=0)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.075);box-shadow:0 1px 2px rgba(0,0,0,0.075)}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{text-shadow:0 -1px 0 #3071a9;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#3278b3));background-image:-webkit-linear-gradient(top,#428bca,0%,#3278b3,100%);background-image:-moz-linear-gradient(top,#428bca 0,#3278b3 100%);background-image:linear-gradient(to bottom,#428bca 0,#3278b3 100%);background-repeat:repeat-x;border-color:#3278b3;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff3278b3',GradientType=0)}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,0.05);box-shadow:0 1px 2px rgba(0,0,0,0.05)}.panel-default>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f5f5f5),to(#e8e8e8));background-image:-webkit-linear-gradient(top,#f5f5f5,0%,#e8e8e8,100%);background-image:-moz-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5',endColorstr='#ffe8e8e8',GradientType=0)}.panel-primary>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.panel-success>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#dff0d8),to(#d0e9c6));background-image:-webkit-linear-gradient(top,#dff0d8,0%,#d0e9c6,100%);background-image:-moz-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8',endColorstr='#ffd0e9c6',GradientType=0)}.panel-info>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#d9edf7),to(#c4e3f3));background-image:-webkit-linear-gradient(top,#d9edf7,0%,#c4e3f3,100%);background-image:-moz-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7',endColorstr='#ffc4e3f3',GradientType=0)}.panel-warning>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#fcf8e3),to(#faf2cc));background-image:-webkit-linear-gradient(top,#fcf8e3,0%,#faf2cc,100%);background-image:-moz-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3',endColorstr='#fffaf2cc',GradientType=0)}.panel-danger>.panel-heading{background-image:-webkit-gradient(linear,left 0,left 100%,from(#f2dede),to(#ebcccc));background-image:-webkit-linear-gradient(top,#f2dede,0%,#ebcccc,100%);background-image:-moz-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede',endColorstr='#ffebcccc',GradientType=0)}.well{background-image:-webkit-gradient(linear,left 0,left 100%,from(#e8e8e8),to(#f5f5f5));background-image:-webkit-linear-gradient(top,#e8e8e8,0%,#f5f5f5,100%);background-image:-moz-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);background-repeat:repeat-x;border-color:#dcdcdc;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8',endColorstr='#fff5f5f5',GradientType=0);-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 3px rgba(0,0,0,0.05),0 1px 0 rgba(255,255,255,0.1)} -------------------------------------------------------------------------------- /electrical/sources/vehicle-interface.parts.txt: -------------------------------------------------------------------------------- 1 | Partlist 2 | 3 | Exported from CANtranslator.sch at 3/11/13 7:49 PM 4 | 5 | EAGLE Version 6.1.0 Copyright (c) 1988-2012 CadSoft 6 | 7 | Assembly variant: 8 | 9 | Part Value Device Package Library Sheet 10 | 11 | C1 0.1u CAP0805 0805 BUG 1 12 | C2 150u CAP_POL5MMX2D CPOL-5MMX2D BUG 1 13 | C3 270u CAP_POL10MMX5D CPOL-10MMX5D BUG 1 14 | C4 22n CAP0402-CAP 0402-CAP BUG 1 15 | C5 0.1u CAP0805 0805 BUG 1 16 | C6 0.1u CAP0402-CAP 0402-CAP BUG 1 17 | C7 0.47u CAP0805 0805 BUG 1 18 | C8 0.1u CAP0805 0805 BUG 1 19 | C9 47u CAP1210 1210 BUG 1 20 | C10 0.1u CAP0402-CAP 0402-CAP BUG 1 21 | C11 22n CAP0402-CAP 0402-CAP BUG 1 22 | C12 0.47u CAP0805 0805 BUG 1 23 | C13 0.1u CAP0805 0805 BUG 1 24 | C14 10u CAP0805 0805 BUG 1 25 | C15 0.1u CAP0402-CAP 0402-CAP BUG 1 26 | C16 0.1u CAP0402-CAP 0402-CAP BUG 1 27 | C17 0.1u CAP0402-CAP 0402-CAP BUG 1 28 | C18 0.1u CAP0402-CAP 0402-CAP BUG 1 29 | C19 0.1u CAP0402-CAP 0402-CAP BUG 1 30 | C20 0.1u CAP0402-CAP 0402-CAP BUG 1 31 | C21 0.1u CAP0402-CAP 0402-CAP BUG 1 32 | C22 1u CAP0402-CAP 0402-CAP BUG 1 33 | C23 0.1u CAP0402-CAP 0402-CAP BUG 1 34 | C24 18p CAP0402-CAP 0402-CAP BUG 1 35 | C25 18p CAP0402-CAP 0402-CAP BUG 1 36 | C26 18p CAP0402-CAP 0402-CAP BUG 1 37 | C27 1u CAP0402-CAP 0402-CAP BUG 1 38 | C28 18p CAP0402-CAP 0402-CAP BUG 1 39 | C29 100p CAP0402-CAP 0402-CAP BUG 1 40 | C30 100p CAP0402-CAP 0402-CAP BUG 1 41 | C31 100p CAP0402-CAP 0402-CAP BUG 1 42 | C32 100p CAP0402-CAP 0402-CAP BUG 1 43 | C33 100p CAP0402-CAP 0402-CAP BUG 1 44 | C34 100p CAP0402-CAP 0402-CAP BUG 1 45 | D1 RS1J DIODESMA SMA-DIODE BUG 1 46 | D2 PESD12VS1ULD DIODE-TVS-SOD882D SOD-882D BUG 1 47 | D3 1SMB16CAT3G DIODE-TVS-SMB SMB-DIODE BUG 1 48 | D4 PESD1CAN DIODE_ESD_DUAL-SOT-23 SOT23 BUG 1 49 | D5 PESD1CAN DIODE_ESD_DUAL-SOT-23 SOT23 BUG 1 50 | D6 PESD5V0X1BL DIODE_ESD_BI-SOD882 SOD-882 BUG 1 51 | D7 PESD5V0X1BL DIODE_ESD_BI-SOD882 SOD-882 BUG 1 52 | D8 DIODE_ESD_DUAL-SOT-1123 SOT-1123 BUG 1 53 | D9 DIODE_ESD_DUAL-SOT-1123 SOT-1123 BUG 1 54 | D10 DIODE_ESD_DUAL-SOT-1123 SOT-1123 BUG 1 55 | F1 MF-MSMF110/16-2 PTCFUSE-1206 R1206 adafruit 1 56 | FB1 742843122 INDUCTOR0402 C0402 BUG 1 57 | IC1 LM340S-50 V_REG_317DPACK V-REG_DPACK SparkFun-PowerIC 1 58 | IC2 TLE4284DV33 V_REG_317DPACK V-REG_DPACK SparkFun-PowerIC 1 59 | IC3 TJA1048T TJA1048-SO14 SO14 BUG 1 60 | IC5 LPC1769FBD100 LPC1768_SPLIT-TQFP TQFP100 BUG 1 61 | IC6 RN41-I/RM BLUETOOTH-RN41" RN41 SparkFun-RF 1 62 | IC7 TPS2421-2 TPS2421SO8 POWER_SO8 BUG 1 63 | J1 USB_MINIB_SHIELD-10118193 USB_MINIB_SHIELD-10118193 10118193 BUG 1 64 | J2 OBDII M08X2-OBDII-COMTECH OBDII-COMTECH BUG 1 65 | J3 ISP ARDUINO_SERIAL_PROGRAMPTH 1X06 SparkFun-Connectors 1 66 | J4 PWR OUT M022-1445055-2 2-1445055-2 BUG 1 67 | J5 ARM mini-JTAG M05X2-SHF-105-01-X-D-SM SHF-105-01-X-D-SM BUG 1 68 | JP2 ISP_EN M02PTH 1X02 SparkFun-Connectors 1 69 | LED1 RGB LED_3X_COMMON_CATHODE LED5MM-RGB BUG 1 70 | LED2 SML-LX0603SRW LED0603 LED-0603 BUG 1 71 | LED3 SML-LX0603SRW LED0603 LED-0603 BUG 1 72 | LED4 RGB LED_3X_COMMON_CATHODE LED5MM-RGB BUG 1 73 | Q1 BC856 TRANSISTOR_PNPSMD SOT23-3 SparkFun-DiscreteSemi 1 74 | Q2 32k CRYSTAL-ST2012SB ST2012SB BUG 1 75 | Q3 12M CRYSTAL-CX3225SB CX3225SB BUG 1 76 | R1 120 RESISTOR0402-RES 0402-RES BUG 1 77 | R2 120 RESISTOR0402-RES 0402-RES BUG 1 78 | R3 10k RESISTOR0402-RES 0402-RES BUG 1 79 | R4 17.4 RESISTOR0402-RES 0402-RES BUG 1 80 | R5 143 RESISTOR0402-RES 0402-RES BUG 1 81 | R6 30 RESISTOR0402-RES 0402-RES BUG 1 82 | R7 33E RESISTOR0402-RES 0402-RES BUG 1 83 | R8 1.5k RESISTOR0402-RES 0402-RES BUG 1 84 | R9 2k RESISTOR0402-RES 0402-RES BUG 1 85 | R10 33E RESISTOR0402-RES 0402-RES BUG 1 86 | R11 560 RESISTOR0402-RES 0402-RES BUG 1 87 | R12 10k RESISTOR0402-RES 0402-RES BUG 1 88 | R13 10k RESISTOR0402-RES 0402-RES BUG 1 89 | R14 10k RESISTOR0402-RES 0402-RES BUG 1 90 | R15 4.7k RESISTOR0402-RES 0402-RES BUG 1 91 | R16 10k RESISTOR0402-RES 0402-RES BUG 1 92 | R17 10k RESISTOR0402-RES 0402-RES BUG 1 93 | R18 49.9k RESISTOR0402-RES 0402-RES BUG 1 94 | R19 560 RESISTOR0402-RES 0402-RES BUG 1 95 | R20 143 RESISTOR0402-RES 0402-RES BUG 1 96 | R21 30 RESISTOR0402-RES 0402-RES BUG 1 97 | R22 17.4 RESISTOR0402-RES 0402-RES BUG 1 98 | R23 10k RESISTOR0402-RES 0402-RES BUG 1 99 | R24 10k RESISTOR0402-RES 0402-RES BUG 1 100 | R25 120 RESISTOR0402-RES 0402-RES BUG 1 101 | R25B DNP RESISTORPTH-1/4W AXIAL-0.4 BUG 1 102 | S1 RESET SWITCH-MOMENTARY-2-SMD-1101NE TACTILE-SWITCH-1101NE SparkFun-Electromechanical 1 103 | S2 PROG SWITCH-MOMENTARY-2-SMD-1101NE TACTILE-SWITCH-1101NE SparkFun-Electromechanical 1 104 | SJ1 CLOSED SOLDERJUMPERTRACE SJ_2S-TRACE SparkFun-Passives 1 105 | SJ2 CLOSED SOLDERJUMPERTRACE SJ_2S-TRACE SparkFun-Passives 1 106 | SJ3 SOLDERJUMPER_2WAYPASTE1&2 SJ_3_PASTE1&2 SparkFun-Passives 1 107 | SJ4 SOLDERJUMPER_2WAYPASTE1&2 SJ_3_PASTE1&2 SparkFun-Passives 1 108 | SJ5 OPEN SOLDERJUMPERNO SJ_2S-NO SparkFun-Passives 1 109 | SJ6 CLOSED SOLDERJUMPERTRACE SJ_2S-TRACE SparkFun-Passives 1 110 | TP1 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 111 | TP2 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 112 | TP3 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 113 | TP4 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 114 | TP5 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 115 | TP6 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 116 | TP7 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 117 | TP8 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 118 | TP9 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 119 | TP10 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 120 | TP11 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 121 | TP12 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 122 | TP13 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 123 | TP14 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 124 | TP15 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 125 | TP16 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 126 | TP17 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 127 | TP18 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 128 | TP19 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 129 | TP20 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 130 | TP21 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 131 | TP22 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 132 | TP23 TEST-POINT3X5 PAD.03X.05 SparkFun-Passives 1 133 | -------------------------------------------------------------------------------- /assembly/electrical/vehicle-interface.GTS: -------------------------------------------------------------------------------- 1 | G75* 2 | %MOIN*% 3 | %OFA0B0*% 4 | %FSLAX24Y24*% 5 | %IPPOS*% 6 | %LPD*% 7 | %AMOC8* 8 | 5,1,8,0,0,1.08239X$1,22.5* 9 | % 10 | %ADD10C,0.1060*% 11 | %ADD11R,0.0651X0.0174*% 12 | %ADD12R,0.0174X0.0651*% 13 | %ADD13R,0.0336X0.0414*% 14 | %ADD14R,0.0414X0.0336*% 15 | %ADD15R,0.0375X0.0532*% 16 | %ADD16R,0.0375X0.0690*% 17 | %ADD17R,0.0690X0.0375*% 18 | %ADD18R,0.0375X0.0375*% 19 | %ADD19R,0.0454X0.0611*% 20 | %ADD20R,0.0690X0.1241*% 21 | %ADD21R,0.2343X0.2501*% 22 | %ADD22R,0.1005X0.1005*% 23 | %ADD23R,0.0532X0.0375*% 24 | %ADD24R,0.0749X0.0769*% 25 | %ADD25R,0.0611X0.0336*% 26 | %ADD26R,0.0473X0.0572*% 27 | %ADD27R,0.0532X0.0296*% 28 | %ADD28R,0.0375X0.0414*% 29 | %ADD29R,0.0710X0.0710*% 30 | %ADD30C,0.0710*% 31 | %ADD31R,0.0310X0.0560*% 32 | %ADD32R,0.0560X0.0310*% 33 | %ADD33R,0.0760X0.0340*% 34 | %ADD34R,0.0966X0.1280*% 35 | %ADD35C,0.1240*% 36 | %ADD36C,0.0660*% 37 | %ADD37R,0.0660X0.0660*% 38 | %ADD38R,0.0690X0.0966*% 39 | %ADD39C,0.0855*% 40 | %ADD40C,0.0600*% 41 | %ADD41R,0.0966X0.0690*% 42 | %ADD42C,0.0800*% 43 | %ADD43C,0.0769*% 44 | %ADD44R,0.0847X0.0532*% 45 | %ADD45R,0.0217X0.0336*% 46 | %ADD46R,0.0336X0.0257*% 47 | %ADD47R,0.0770X0.0690*% 48 | %ADD48R,0.0194X0.0162*% 49 | %ADD49R,0.0162X0.0194*% 50 | %ADD50C,0.0420*% 51 | %ADD51C,0.0360*% 52 | %ADD52C,0.0510*% 53 | D10* 54 | X023700Y022450D03* 55 | X042800Y022450D03* 56 | X042800Y040050D03* 57 | X023700Y040050D03* 58 | D11* 59 | X033550Y035312D03* 60 | X033550Y035115D03* 61 | X033550Y034919D03* 62 | X033550Y034722D03* 63 | X033550Y034525D03* 64 | X033550Y034328D03* 65 | X033550Y034131D03* 66 | X033550Y033934D03* 67 | X033550Y033737D03* 68 | X033550Y033541D03* 69 | X033550Y033344D03* 70 | X033550Y033147D03* 71 | X033550Y032950D03* 72 | X033550Y032753D03* 73 | X033550Y032556D03* 74 | X033550Y032359D03* 75 | X033550Y032163D03* 76 | X033550Y031966D03* 77 | X033550Y031769D03* 78 | X033550Y031572D03* 79 | X033550Y031375D03* 80 | X033550Y031178D03* 81 | X033550Y030981D03* 82 | X033550Y030785D03* 83 | X033550Y030588D03* 84 | X039850Y030588D03* 85 | X039850Y030785D03* 86 | X039850Y030981D03* 87 | X039850Y031178D03* 88 | X039850Y031375D03* 89 | X039850Y031572D03* 90 | X039850Y031769D03* 91 | X039850Y031966D03* 92 | X039850Y032163D03* 93 | X039850Y032359D03* 94 | X039850Y032556D03* 95 | X039850Y032753D03* 96 | X039850Y032950D03* 97 | X039850Y033147D03* 98 | X039850Y033344D03* 99 | X039850Y033541D03* 100 | X039850Y033737D03* 101 | X039850Y033934D03* 102 | X039850Y034131D03* 103 | X039850Y034328D03* 104 | X039850Y034525D03* 105 | X039850Y034722D03* 106 | X039850Y034919D03* 107 | X039850Y035115D03* 108 | X039850Y035312D03* 109 | D12* 110 | X039062Y036100D03* 111 | X038865Y036100D03* 112 | X038669Y036100D03* 113 | X038472Y036100D03* 114 | X038275Y036100D03* 115 | X038078Y036100D03* 116 | X037881Y036100D03* 117 | X037684Y036100D03* 118 | X037487Y036100D03* 119 | X037291Y036100D03* 120 | X037094Y036100D03* 121 | X036897Y036100D03* 122 | X036700Y036100D03* 123 | X036503Y036100D03* 124 | X036306Y036100D03* 125 | X036109Y036100D03* 126 | X035913Y036100D03* 127 | X035716Y036100D03* 128 | X035519Y036100D03* 129 | X035322Y036100D03* 130 | X035125Y036100D03* 131 | X034928Y036100D03* 132 | X034731Y036100D03* 133 | X034535Y036100D03* 134 | X034338Y036100D03* 135 | X034338Y029800D03* 136 | X034535Y029800D03* 137 | X034731Y029800D03* 138 | X034928Y029800D03* 139 | X035125Y029800D03* 140 | X035322Y029800D03* 141 | X035519Y029800D03* 142 | X035716Y029800D03* 143 | X035913Y029800D03* 144 | X036109Y029800D03* 145 | X036306Y029800D03* 146 | X036503Y029800D03* 147 | X036700Y029800D03* 148 | X036897Y029800D03* 149 | X037094Y029800D03* 150 | X037291Y029800D03* 151 | X037487Y029800D03* 152 | X037684Y029800D03* 153 | X037881Y029800D03* 154 | X038078Y029800D03* 155 | X038275Y029800D03* 156 | X038472Y029800D03* 157 | X038669Y029800D03* 158 | X038865Y029800D03* 159 | X039062Y029800D03* 160 | D13* 161 | X038256Y029240D03* 162 | X037744Y029240D03* 163 | X036856Y029220D03* 164 | X036344Y029220D03* 165 | X033256Y029050D03* 166 | X033256Y028550D03* 167 | X032744Y028550D03* 168 | X032744Y029050D03* 169 | X032744Y029550D03* 170 | X033256Y029550D03* 171 | X029076Y026390D03* 172 | X028564Y026390D03* 173 | X024856Y029650D03* 174 | X024344Y029650D03* 175 | X023656Y029650D03* 176 | X023144Y029650D03* 177 | X023194Y032850D03* 178 | X023706Y032850D03* 179 | X024144Y032850D03* 180 | X024656Y032850D03* 181 | X023956Y034530D03* 182 | X023444Y034530D03* 183 | X030944Y038350D03* 184 | X031456Y038350D03* 185 | X032114Y035310D03* 186 | X032626Y035310D03* 187 | X039344Y036590D03* 188 | X039856Y036590D03* 189 | X042144Y034550D03* 190 | X042656Y034550D03* 191 | X042356Y033750D03* 192 | X041844Y033750D03* 193 | X041844Y033150D03* 194 | X042356Y033150D03* 195 | X042944Y032950D03* 196 | X043456Y032950D03* 197 | X043456Y033550D03* 198 | X042944Y033550D03* 199 | X041356Y031950D03* 200 | X041344Y031450D03* 201 | X041856Y031450D03* 202 | X041856Y030850D03* 203 | X041856Y030350D03* 204 | X041856Y029850D03* 205 | X041344Y029850D03* 206 | X041344Y030350D03* 207 | X041344Y030850D03* 208 | X040844Y031950D03* 209 | X037756Y040750D03* 210 | X037244Y040750D03* 211 | X023656Y025050D03* 212 | X023144Y025050D03* 213 | X022944Y024150D03* 214 | X023456Y024150D03* 215 | X038010Y021646D03* 216 | X038522Y021646D03* 217 | D14* 218 | X042500Y027894D03* 219 | X043000Y027894D03* 220 | X043500Y027894D03* 221 | X043500Y028406D03* 222 | X043000Y028406D03* 223 | X042500Y028406D03* 224 | X043300Y034994D03* 225 | X043300Y035506D03* 226 | X041300Y035994D03* 227 | X041300Y036506D03* 228 | X040700Y037594D03* 229 | X040700Y038106D03* 230 | X041500Y037994D03* 231 | X042000Y037994D03* 232 | X042500Y037994D03* 233 | X042500Y038506D03* 234 | X042000Y038506D03* 235 | X041500Y038506D03* 236 | X039800Y038106D03* 237 | X039300Y038106D03* 238 | X039300Y037594D03* 239 | X039800Y037594D03* 240 | X037280Y038494D03* 241 | X037280Y039006D03* 242 | X037700Y039564D03* 243 | X037700Y040076D03* 244 | X036300Y039006D03* 245 | X036300Y038494D03* 246 | X035900Y037406D03* 247 | X035900Y036894D03* 248 | X033160Y036406D03* 249 | X032660Y036406D03* 250 | X032660Y035894D03* 251 | X033160Y035894D03* 252 | X032100Y038294D03* 253 | X032100Y038806D03* 254 | X027800Y036606D03* 255 | X027800Y036094D03* 256 | X032930Y031976D03* 257 | X032930Y031464D03* 258 | X024900Y024306D03* 259 | X024900Y023794D03* 260 | X029900Y022956D03* 261 | X029900Y022444D03* 262 | D15* 263 | X040846Y032550D03* 264 | X041554Y032550D03* 265 | X024854Y035950D03* 266 | X024146Y035950D03* 267 | X023654Y035950D03* 268 | X022946Y035950D03* 269 | D16* 270 | X033002Y027448D03* 271 | X033474Y027448D03* 272 | X033946Y027448D03* 273 | X034419Y027448D03* 274 | X034891Y027448D03* 275 | X035364Y027448D03* 276 | X035836Y027448D03* 277 | X036309Y027448D03* 278 | X036781Y027448D03* 279 | X037254Y027448D03* 280 | X037726Y027448D03* 281 | X038198Y027448D03* 282 | X038198Y022252D03* 283 | X037726Y022252D03* 284 | X037254Y022252D03* 285 | X036781Y022252D03* 286 | X036309Y022252D03* 287 | X035836Y022252D03* 288 | X035364Y022252D03* 289 | X034891Y022252D03* 290 | X034419Y022252D03* 291 | X033946Y022252D03* 292 | X033474Y022252D03* 293 | X033002Y022252D03* 294 | D17* 295 | X031899Y023227D03* 296 | X031899Y023630D03* 297 | X031899Y024102D03* 298 | X031899Y024574D03* 299 | X031899Y025126D03* 300 | X031899Y025598D03* 301 | X031899Y026070D03* 302 | X031899Y026473D03* 303 | X039301Y024220D03* 304 | X039301Y023590D03* 305 | X039301Y022960D03* 306 | D18* 307 | X037395Y021650D03* 308 | X036805Y021650D03* 309 | X038300Y040295D03* 310 | X038300Y040885D03* 311 | D19* 312 | X025910Y025313D03* 313 | X025536Y024447D03* 314 | X026284Y024447D03* 315 | X026274Y022683D03* 316 | X025526Y022683D03* 317 | X025900Y021817D03* 318 | D20* 319 | X026902Y030740D03* 320 | X028698Y030740D03* 321 | X028698Y036240D03* 322 | X026902Y036240D03* 323 | D21* 324 | X027800Y033413D03* 325 | X027800Y027913D03* 326 | D22* 327 | X024966Y038050D03* 328 | X023234Y038050D03* 329 | D23* 330 | X026080Y037524D03* 331 | X026080Y036816D03* 332 | X026080Y036404D03* 333 | X026080Y035696D03* 334 | X026100Y034804D03* 335 | X026100Y034096D03* 336 | X026100Y033604D03* 337 | X026100Y032896D03* 338 | D24* 339 | X026048Y038350D03* 340 | X027552Y038350D03* 341 | D25* 342 | X041300Y033745D03* 343 | X041300Y033155D03* 344 | D26* 345 | X040936Y034557D03* 346 | X041664Y034557D03* 347 | X041664Y035463D03* 348 | X040936Y035463D03* 349 | D27* 350 | X029102Y025250D03* 351 | X029102Y024750D03* 352 | X029102Y024250D03* 353 | X029102Y023750D03* 354 | X029102Y023250D03* 355 | X029102Y022750D03* 356 | X029102Y022250D03* 357 | X026898Y022250D03* 358 | X026898Y022750D03* 359 | X026898Y023250D03* 360 | X026898Y023750D03* 361 | X026898Y024250D03* 362 | X026898Y024750D03* 363 | X026898Y025250D03* 364 | D28* 365 | X036800Y039117D03* 366 | X036426Y039944D03* 367 | X037174Y039944D03* 368 | D29* 369 | X029650Y034476D03* 370 | X026940Y037366D03* 371 | D30* 372 | X026940Y039334D03* 373 | X029650Y035264D03* 374 | D31* 375 | X034200Y028250D03* 376 | X034600Y028250D03* 377 | X035523Y028350D03* 378 | X035877Y028350D03* 379 | X024200Y024150D03* 380 | X023800Y024150D03* 381 | D32* 382 | X024900Y024650D03* 383 | X024900Y025050D03* 384 | D33* 385 | X029252Y038900D03* 386 | X029252Y039400D03* 387 | X029252Y039900D03* 388 | X029252Y040400D03* 389 | X031348Y040400D03* 390 | X031348Y039900D03* 391 | X031348Y039400D03* 392 | X031348Y038900D03* 393 | D34* 394 | X030300Y039650D03* 395 | D35* 396 | X034000Y040200D03* 397 | D36* 398 | X033410Y038500D03* 399 | D37* 400 | X034590Y038500D03* 401 | D38* 402 | X043000Y032190D03* 403 | X043000Y029710D03* 404 | D39* 405 | X024630Y030463D03* 406 | X023370Y030463D03* 407 | X023370Y032037D03* 408 | X024630Y032037D03* 409 | X024630Y033612D03* 410 | X023370Y033612D03* 411 | X023370Y035187D03* 412 | X024630Y035187D03* 413 | X024630Y036762D03* 414 | X023370Y036762D03* 415 | X023370Y028888D03* 416 | X024630Y028888D03* 417 | X024630Y027313D03* 418 | X023370Y027313D03* 419 | X023370Y025738D03* 420 | X024630Y025738D03* 421 | D40* 422 | X042500Y025940D03* 423 | X042500Y025320D03* 424 | X042500Y026560D03* 425 | X042500Y027180D03* 426 | X042500Y035320D03* 427 | X042500Y035940D03* 428 | X042500Y036560D03* 429 | X042500Y037180D03* 430 | D41* 431 | X034840Y037450D03* 432 | X032360Y037450D03* 433 | D42* 434 | X031300Y036250D03* 435 | X031300Y035250D03* 436 | X040565Y036273D03* 437 | X043394Y039101D03* 438 | X041700Y028450D03* 439 | X040700Y028450D03* 440 | X039700Y028450D03* 441 | X038700Y028450D03* 442 | X037700Y028450D03* 443 | X036700Y028450D03* 444 | D43* 445 | X039001Y040680D03* 446 | X041599Y040680D03* 447 | D44* 448 | X027800Y031860D03* 449 | X027800Y030600D03* 450 | D45* 451 | X039682Y039270D03* 452 | X039958Y039270D03* 453 | X040302Y039270D03* 454 | X040578Y039270D03* 455 | D46* 456 | X037720Y038707D03* 457 | X037720Y038393D03* 458 | D47* 459 | X030200Y037310D03* 460 | X030200Y036190D03* 461 | D48* 462 | X039831Y029942D03* 463 | X039831Y029758D03* 464 | X040169Y029850D03* 465 | X040711Y031068D03* 466 | X040711Y031252D03* 467 | X041049Y031160D03* 468 | D49* 469 | X040992Y030179D03* 470 | X040808Y030179D03* 471 | X040900Y029841D03* 472 | D50* 473 | X025370Y021810D03* 474 | X026470Y021810D03* 475 | X027900Y021660D03* 476 | X029210Y021860D03* 477 | X029600Y022030D03* 478 | X030550Y022030D03* 479 | X031410Y022540D03* 480 | X031310Y023340D03* 481 | X031310Y024140D03* 482 | X031310Y024940D03* 483 | X031310Y025740D03* 484 | X031310Y026540D03* 485 | X031760Y026910D03* 486 | X030830Y027640D03* 487 | X031030Y028070D03* 488 | X030800Y028550D03* 489 | X029350Y027350D03* 490 | X029340Y026850D03* 491 | X029620Y025860D03* 492 | X029620Y025360D03* 493 | X029620Y024760D03* 494 | X029620Y024260D03* 495 | X029000Y025650D03* 496 | X028500Y025750D03* 497 | X028160Y026410D03* 498 | X026300Y026850D03* 499 | X026300Y027350D03* 500 | X026260Y027940D03* 501 | X026260Y028740D03* 502 | X026260Y029440D03* 503 | X026900Y029850D03* 504 | X027500Y029950D03* 505 | X028100Y029950D03* 506 | X029380Y030250D03* 507 | X029380Y030950D03* 508 | X029380Y031650D03* 509 | X028700Y031620D03* 510 | X029380Y032350D03* 511 | X029380Y033160D03* 512 | X029690Y033850D03* 513 | X030310Y034440D03* 514 | X030990Y034650D03* 515 | X031590Y034650D03* 516 | X032350Y034850D03* 517 | X031190Y033350D03* 518 | X030690Y032850D03* 519 | X032500Y032250D03* 520 | X032960Y032600D03* 521 | X032460Y031580D03* 522 | X032450Y031120D03* 523 | X032500Y030350D03* 524 | X032950Y030510D03* 525 | X033700Y030240D03* 526 | X034200Y029050D03* 527 | X034600Y028850D03* 528 | X035030Y028650D03* 529 | X035500Y028880D03* 530 | X035930Y029160D03* 531 | X037210Y028030D03* 532 | X038650Y027700D03* 533 | X041560Y029350D03* 534 | X042050Y029400D03* 535 | X042500Y028950D03* 536 | X043000Y028950D03* 537 | X043500Y028950D03* 538 | X042050Y031920D03* 539 | X042400Y032250D03* 540 | X042010Y032680D03* 541 | X040420Y032050D03* 542 | X040690Y033620D03* 543 | X042060Y035000D03* 544 | X043060Y035940D03* 545 | X043160Y036540D03* 546 | X041450Y037000D03* 547 | X040310Y035660D03* 548 | X039890Y036110D03* 549 | X039440Y036060D03* 550 | X039860Y037070D03* 551 | X040240Y037360D03* 552 | X040240Y037860D03* 553 | X040240Y038390D03* 554 | X040200Y038850D03* 555 | X040700Y038850D03* 556 | X041040Y038490D03* 557 | X041200Y038990D03* 558 | X039697Y038850D03* 559 | X039200Y038850D03* 560 | X038830Y038390D03* 561 | X038720Y037580D03* 562 | X037650Y037990D03* 563 | X037440Y037560D03* 564 | X037100Y037250D03* 565 | X036700Y037550D03* 566 | X036320Y037150D03* 567 | X035820Y037930D03* 568 | X035800Y038850D03* 569 | X037800Y039150D03* 570 | X038200Y039850D03* 571 | X035400Y036750D03* 572 | X034920Y036730D03* 573 | X033990Y035960D03* 574 | X033100Y036850D03* 575 | X032190Y036850D03* 576 | X032200Y036350D03* 577 | X031490Y036950D03* 578 | X031490Y037550D03* 579 | X030900Y037350D03* 580 | X030490Y038450D03* 581 | X030050Y038450D03* 582 | X029620Y038450D03* 583 | X029100Y037950D03* 584 | X028210Y038720D03* 585 | X028600Y040250D03* 586 | X028600Y040750D03* 587 | X029850Y040850D03* 588 | X030290Y040850D03* 589 | X030720Y040850D03* 590 | X031600Y040850D03* 591 | X032100Y040850D03* 592 | X029310Y036050D03* 593 | X027290Y035350D03* 594 | X026100Y035250D03* 595 | X025400Y035750D03* 596 | X025100Y034550D03* 597 | X024400Y034550D03* 598 | X025600Y034050D03* 599 | X026300Y032350D03* 600 | X026300Y031650D03* 601 | X026260Y030940D03* 602 | X026260Y030240D03* 603 | X025200Y030050D03* 604 | X025200Y029250D03* 605 | X025200Y030850D03* 606 | X025200Y031650D03* 607 | X023000Y034450D03* 608 | X023950Y037090D03* 609 | X022910Y037270D03* 610 | X022930Y038850D03* 611 | X023420Y039040D03* 612 | X023950Y039040D03* 613 | X025480Y037110D03* 614 | X023630Y028180D03* 615 | X024230Y027880D03* 616 | X025200Y026850D03* 617 | X025200Y026150D03* 618 | X025240Y025450D03* 619 | X024200Y024950D03* 620 | X025540Y023890D03* 621 | X026340Y023730D03* 622 | X026400Y025450D03* 623 | X032720Y028080D03* 624 | X033800Y028140D03* 625 | X038700Y022090D03* 626 | X035800Y021650D03* 627 | X034420Y021650D03* 628 | X033950Y021650D03* 629 | X033470Y021650D03* 630 | X033000Y021650D03* 631 | X043200Y034040D03* 632 | X043600Y034460D03* 633 | D51* 634 | X040420Y032830D03* 635 | X040970Y030750D03* 636 | X040420Y030530D03* 637 | X040100Y030250D03* 638 | X039600Y030250D03* 639 | X039380Y029660D03* 640 | X040520Y029950D03* 641 | X042200Y031150D03* 642 | D52* 643 | X033800Y029550D03* 644 | X029690Y023420D03* 645 | M02* 646 | -------------------------------------------------------------------------------- /static/bootstrap/css/bootstrap-responsive.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.3.2 3 | * 4 | * Copyright 2013 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world by @mdo and @fat. 9 | */.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;line-height:0;content:""}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}@-ms-viewport{width:device-width}.hidden{display:none;visibility:hidden}.visible-phone{display:none!important}.visible-tablet{display:none!important}.hidden-desktop{display:none!important}.visible-desktop{display:inherit!important}@media(min-width:768px) and (max-width:979px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-tablet{display:inherit!important}.hidden-tablet{display:none!important}}@media(max-width:767px){.hidden-desktop{display:inherit!important}.visible-desktop{display:none!important}.visible-phone{display:inherit!important}.hidden-phone{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:inherit!important}.hidden-print{display:none!important}}@media(min-width:1200px){.row{margin-left:-30px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:30px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px}.span12{width:1170px}.span11{width:1070px}.span10{width:970px}.span9{width:870px}.span8{width:770px}.span7{width:670px}.span6{width:570px}.span5{width:470px}.span4{width:370px}.span3{width:270px}.span2{width:170px}.span1{width:70px}.offset12{margin-left:1230px}.offset11{margin-left:1130px}.offset10{margin-left:1030px}.offset9{margin-left:930px}.offset8{margin-left:830px}.offset7{margin-left:730px}.offset6{margin-left:630px}.offset5{margin-left:530px}.offset4{margin-left:430px}.offset3{margin-left:330px}.offset2{margin-left:230px}.offset1{margin-left:130px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.564102564102564%;*margin-left:2.5109110747408616%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.564102564102564%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.45299145299145%;*width:91.39979996362975%}.row-fluid .span10{width:82.90598290598291%;*width:82.8527914166212%}.row-fluid .span9{width:74.35897435897436%;*width:74.30578286961266%}.row-fluid .span8{width:65.81196581196582%;*width:65.75877432260411%}.row-fluid .span7{width:57.26495726495726%;*width:57.21176577559556%}.row-fluid .span6{width:48.717948717948715%;*width:48.664757228587014%}.row-fluid .span5{width:40.17094017094017%;*width:40.11774868157847%}.row-fluid .span4{width:31.623931623931625%;*width:31.570740134569924%}.row-fluid .span3{width:23.076923076923077%;*width:23.023731587561375%}.row-fluid .span2{width:14.52991452991453%;*width:14.476723040552828%}.row-fluid .span1{width:5.982905982905983%;*width:5.929714493544281%}.row-fluid .offset12{margin-left:105.12820512820512%;*margin-left:105.02182214948171%}.row-fluid .offset12:first-child{margin-left:102.56410256410257%;*margin-left:102.45771958537915%}.row-fluid .offset11{margin-left:96.58119658119658%;*margin-left:96.47481360247316%}.row-fluid .offset11:first-child{margin-left:94.01709401709402%;*margin-left:93.91071103837061%}.row-fluid .offset10{margin-left:88.03418803418803%;*margin-left:87.92780505546462%}.row-fluid .offset10:first-child{margin-left:85.47008547008548%;*margin-left:85.36370249136206%}.row-fluid .offset9{margin-left:79.48717948717949%;*margin-left:79.38079650845607%}.row-fluid .offset9:first-child{margin-left:76.92307692307693%;*margin-left:76.81669394435352%}.row-fluid .offset8{margin-left:70.94017094017094%;*margin-left:70.83378796144753%}.row-fluid .offset8:first-child{margin-left:68.37606837606839%;*margin-left:68.26968539734497%}.row-fluid .offset7{margin-left:62.393162393162385%;*margin-left:62.28677941443899%}.row-fluid .offset7:first-child{margin-left:59.82905982905982%;*margin-left:59.72267685033642%}.row-fluid .offset6{margin-left:53.84615384615384%;*margin-left:53.739770867430444%}.row-fluid .offset6:first-child{margin-left:51.28205128205128%;*margin-left:51.175668303327875%}.row-fluid .offset5{margin-left:45.299145299145295%;*margin-left:45.1927623204219%}.row-fluid .offset5:first-child{margin-left:42.73504273504273%;*margin-left:42.62865975631933%}.row-fluid .offset4{margin-left:36.75213675213675%;*margin-left:36.645753773413354%}.row-fluid .offset4:first-child{margin-left:34.18803418803419%;*margin-left:34.081651209310785%}.row-fluid .offset3{margin-left:28.205128205128204%;*margin-left:28.0987452264048%}.row-fluid .offset3:first-child{margin-left:25.641025641025642%;*margin-left:25.53464266230224%}.row-fluid .offset2{margin-left:19.65811965811966%;*margin-left:19.551736679396257%}.row-fluid .offset2:first-child{margin-left:17.094017094017094%;*margin-left:16.98763411529369%}.row-fluid .offset1{margin-left:11.11111111111111%;*margin-left:11.004728132387708%}.row-fluid .offset1:first-child{margin-left:8.547008547008547%;*margin-left:8.440625568285142%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:30px}input.span12,textarea.span12,.uneditable-input.span12{width:1156px}input.span11,textarea.span11,.uneditable-input.span11{width:1056px}input.span10,textarea.span10,.uneditable-input.span10{width:956px}input.span9,textarea.span9,.uneditable-input.span9{width:856px}input.span8,textarea.span8,.uneditable-input.span8{width:756px}input.span7,textarea.span7,.uneditable-input.span7{width:656px}input.span6,textarea.span6,.uneditable-input.span6{width:556px}input.span5,textarea.span5,.uneditable-input.span5{width:456px}input.span4,textarea.span4,.uneditable-input.span4{width:356px}input.span3,textarea.span3,.uneditable-input.span3{width:256px}input.span2,textarea.span2,.uneditable-input.span2{width:156px}input.span1,textarea.span1,.uneditable-input.span1{width:56px}.thumbnails{margin-left:-30px}.thumbnails>li{margin-left:30px}.row-fluid .thumbnails{margin-left:0}}@media(min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1}.row:before,.row:after{display:table;line-height:0;content:""}.row:after{clear:both}[class*="span"]{float:left;min-height:1px;margin-left:20px}.container,.navbar-static-top .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px}.span12{width:724px}.span11{width:662px}.span10{width:600px}.span9{width:538px}.span8{width:476px}.span7{width:414px}.span6{width:352px}.span5{width:290px}.span4{width:228px}.span3{width:166px}.span2{width:104px}.span1{width:42px}.offset12{margin-left:764px}.offset11{margin-left:702px}.offset10{margin-left:640px}.offset9{margin-left:578px}.offset8{margin-left:516px}.offset7{margin-left:454px}.offset6{margin-left:392px}.offset5{margin-left:330px}.offset4{margin-left:268px}.offset3{margin-left:206px}.offset2{margin-left:144px}.offset1{margin-left:82px}.row-fluid{width:100%;*zoom:1}.row-fluid:before,.row-fluid:after{display:table;line-height:0;content:""}.row-fluid:after{clear:both}.row-fluid [class*="span"]{display:block;float:left;width:100%;min-height:30px;margin-left:2.7624309392265194%;*margin-left:2.709239449864817%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="span"]:first-child{margin-left:0}.row-fluid .controls-row [class*="span"]+[class*="span"]{margin-left:2.7624309392265194%}.row-fluid .span12{width:100%;*width:99.94680851063829%}.row-fluid .span11{width:91.43646408839778%;*width:91.38327259903608%}.row-fluid .span10{width:82.87292817679558%;*width:82.81973668743387%}.row-fluid .span9{width:74.30939226519337%;*width:74.25620077583166%}.row-fluid .span8{width:65.74585635359117%;*width:65.69266486422946%}.row-fluid .span7{width:57.18232044198895%;*width:57.12912895262725%}.row-fluid .span6{width:48.61878453038674%;*width:48.56559304102504%}.row-fluid .span5{width:40.05524861878453%;*width:40.00205712942283%}.row-fluid .span4{width:31.491712707182323%;*width:31.43852121782062%}.row-fluid .span3{width:22.92817679558011%;*width:22.87498530621841%}.row-fluid .span2{width:14.3646408839779%;*width:14.311449394616199%}.row-fluid .span1{width:5.801104972375691%;*width:5.747913483013988%}.row-fluid .offset12{margin-left:105.52486187845304%;*margin-left:105.41847889972962%}.row-fluid .offset12:first-child{margin-left:102.76243093922652%;*margin-left:102.6560479605031%}.row-fluid .offset11{margin-left:96.96132596685082%;*margin-left:96.8549429881274%}.row-fluid .offset11:first-child{margin-left:94.1988950276243%;*margin-left:94.09251204890089%}.row-fluid .offset10{margin-left:88.39779005524862%;*margin-left:88.2914070765252%}.row-fluid .offset10:first-child{margin-left:85.6353591160221%;*margin-left:85.52897613729868%}.row-fluid .offset9{margin-left:79.8342541436464%;*margin-left:79.72787116492299%}.row-fluid .offset9:first-child{margin-left:77.07182320441989%;*margin-left:76.96544022569647%}.row-fluid .offset8{margin-left:71.2707182320442%;*margin-left:71.16433525332079%}.row-fluid .offset8:first-child{margin-left:68.50828729281768%;*margin-left:68.40190431409427%}.row-fluid .offset7{margin-left:62.70718232044199%;*margin-left:62.600799341718584%}.row-fluid .offset7:first-child{margin-left:59.94475138121547%;*margin-left:59.838368402492065%}.row-fluid .offset6{margin-left:54.14364640883978%;*margin-left:54.037263430116376%}.row-fluid .offset6:first-child{margin-left:51.38121546961326%;*margin-left:51.27483249088986%}.row-fluid .offset5{margin-left:45.58011049723757%;*margin-left:45.47372751851417%}.row-fluid .offset5:first-child{margin-left:42.81767955801105%;*margin-left:42.71129657928765%}.row-fluid .offset4{margin-left:37.01657458563536%;*margin-left:36.91019160691196%}.row-fluid .offset4:first-child{margin-left:34.25414364640884%;*margin-left:34.14776066768544%}.row-fluid .offset3{margin-left:28.45303867403315%;*margin-left:28.346655695309746%}.row-fluid .offset3:first-child{margin-left:25.69060773480663%;*margin-left:25.584224756083227%}.row-fluid .offset2{margin-left:19.88950276243094%;*margin-left:19.783119783707537%}.row-fluid .offset2:first-child{margin-left:17.12707182320442%;*margin-left:17.02068884448102%}.row-fluid .offset1{margin-left:11.32596685082873%;*margin-left:11.219583872105325%}.row-fluid .offset1:first-child{margin-left:8.56353591160221%;*margin-left:8.457152932878806%}input,textarea,.uneditable-input{margin-left:0}.controls-row [class*="span"]+[class*="span"]{margin-left:20px}input.span12,textarea.span12,.uneditable-input.span12{width:710px}input.span11,textarea.span11,.uneditable-input.span11{width:648px}input.span10,textarea.span10,.uneditable-input.span10{width:586px}input.span9,textarea.span9,.uneditable-input.span9{width:524px}input.span8,textarea.span8,.uneditable-input.span8{width:462px}input.span7,textarea.span7,.uneditable-input.span7{width:400px}input.span6,textarea.span6,.uneditable-input.span6{width:338px}input.span5,textarea.span5,.uneditable-input.span5{width:276px}input.span4,textarea.span4,.uneditable-input.span4{width:214px}input.span3,textarea.span3,.uneditable-input.span3{width:152px}input.span2,textarea.span2,.uneditable-input.span2{width:90px}input.span1,textarea.span1,.uneditable-input.span1{width:28px}}@media(max-width:767px){body{padding-right:20px;padding-left:20px}.navbar-fixed-top,.navbar-fixed-bottom,.navbar-static-top{margin-right:-20px;margin-left:-20px}.container-fluid{padding:0}.dl-horizontal dt{float:none;width:auto;clear:none;text-align:left}.dl-horizontal dd{margin-left:0}.container{width:auto}.row-fluid{width:100%}.row,.thumbnails{margin-left:0}.thumbnails>li{float:none;margin-left:0}[class*="span"],.uneditable-input[class*="span"],.row-fluid [class*="span"]{display:block;float:none;width:100%;margin-left:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.span12,.row-fluid .span12{width:100%;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.row-fluid [class*="offset"]:first-child{margin-left:0}.input-large,.input-xlarge,.input-xxlarge,input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-prepend input,.input-append input,.input-prepend input[class*="span"],.input-append input[class*="span"]{display:inline-block;width:auto}.controls-row [class*="span"]+[class*="span"]{margin-left:0}.modal{position:fixed;top:20px;right:20px;left:20px;width:auto;margin:0}.modal.fade{top:-100px}.modal.fade.in{top:20px}}@media(max-width:480px){.nav-collapse{-webkit-transform:translate3d(0,0,0)}.page-header h1 small{display:block;line-height:20px}input[type="checkbox"],input[type="radio"]{border:1px solid #ccc}.form-horizontal .control-label{float:none;width:auto;padding-top:0;text-align:left}.form-horizontal .controls{margin-left:0}.form-horizontal .control-list{padding-top:0}.form-horizontal .form-actions{padding-right:10px;padding-left:10px}.media .pull-left,.media .pull-right{display:block;float:none;margin-bottom:10px}.media-object{margin-right:0;margin-left:0}.modal{top:10px;right:10px;left:10px}.modal-header .close{padding:10px;margin:-10px}.carousel-caption{position:static}}@media(max-width:979px){body{padding-top:0}.navbar-fixed-top,.navbar-fixed-bottom{position:static}.navbar-fixed-top{margin-bottom:20px}.navbar-fixed-bottom{margin-top:20px}.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding:5px}.navbar .container{width:auto;padding:0}.navbar .brand{padding-right:10px;padding-left:10px;margin:0 0 0 -5px}.nav-collapse{clear:both}.nav-collapse .nav{float:none;margin:0 0 10px}.nav-collapse .nav>li{float:none}.nav-collapse .nav>li>a{margin-bottom:2px}.nav-collapse .nav>.divider-vertical{display:none}.nav-collapse .nav .nav-header{color:#777;text-shadow:none}.nav-collapse .nav>li>a,.nav-collapse .dropdown-menu a{padding:9px 15px;font-weight:bold;color:#777;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.nav-collapse .btn{padding:4px 10px 4px;font-weight:normal;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.nav-collapse .dropdown-menu li+li a{margin-bottom:2px}.nav-collapse .nav>li>a:hover,.nav-collapse .nav>li>a:focus,.nav-collapse .dropdown-menu a:hover,.nav-collapse .dropdown-menu a:focus{background-color:#f2f2f2}.navbar-inverse .nav-collapse .nav>li>a,.navbar-inverse .nav-collapse .dropdown-menu a{color:#999}.navbar-inverse .nav-collapse .nav>li>a:hover,.navbar-inverse .nav-collapse .nav>li>a:focus,.navbar-inverse .nav-collapse .dropdown-menu a:hover,.navbar-inverse .nav-collapse .dropdown-menu a:focus{background-color:#111}.nav-collapse.in .btn-group{padding:0;margin-top:5px}.nav-collapse .dropdown-menu{position:static;top:auto;left:auto;display:none;float:none;max-width:none;padding:0;margin:0 15px;background-color:transparent;border:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.nav-collapse .open>.dropdown-menu{display:block}.nav-collapse .dropdown-menu:before,.nav-collapse .dropdown-menu:after{display:none}.nav-collapse .dropdown-menu .divider{display:none}.nav-collapse .nav>li>.dropdown-menu:before,.nav-collapse .nav>li>.dropdown-menu:after{display:none}.nav-collapse .navbar-form,.nav-collapse .navbar-search{float:none;padding:10px 15px;margin:10px 0;border-top:1px solid #f2f2f2;border-bottom:1px solid #f2f2f2;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1)}.navbar-inverse .nav-collapse .navbar-form,.navbar-inverse .nav-collapse .navbar-search{border-top-color:#111;border-bottom-color:#111}.navbar .nav-collapse .nav.pull-right{float:none;margin-left:0}.nav-collapse,.nav-collapse.collapse{height:0;overflow:hidden}.navbar .btn-navbar{display:block}.navbar-static .navbar-inner{padding-right:10px;padding-left:10px}}@media(min-width:980px){.nav-collapse.collapse{height:auto!important;overflow:visible!important}} 10 | -------------------------------------------------------------------------------- /static/bootstrap/css/bootstrap-theme.css: -------------------------------------------------------------------------------- 1 | .btn-default, 2 | .btn-primary, 3 | .btn-success, 4 | .btn-info, 5 | .btn-warning, 6 | .btn-danger { 7 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); 8 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 9 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); 10 | } 11 | 12 | .btn-default:active, 13 | .btn-primary:active, 14 | .btn-success:active, 15 | .btn-info:active, 16 | .btn-warning:active, 17 | .btn-danger:active, 18 | .btn-default.active, 19 | .btn-primary.active, 20 | .btn-success.active, 21 | .btn-info.active, 22 | .btn-warning.active, 23 | .btn-danger.active { 24 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 25 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); 26 | } 27 | 28 | .btn:active, 29 | .btn.active { 30 | background-image: none; 31 | } 32 | 33 | .btn-default { 34 | text-shadow: 0 1px 0 #fff; 35 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e6e6e6)); 36 | background-image: -webkit-linear-gradient(top, #ffffff, 0%, #e6e6e6, 100%); 37 | background-image: -moz-linear-gradient(top, #ffffff 0%, #e6e6e6 100%); 38 | background-image: linear-gradient(to bottom, #ffffff 0%, #e6e6e6 100%); 39 | background-repeat: repeat-x; 40 | border-color: #e0e0e0; 41 | border-color: #ccc; 42 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); 43 | } 44 | 45 | .btn-default:active, 46 | .btn-default.active { 47 | background-color: #e6e6e6; 48 | border-color: #e0e0e0; 49 | } 50 | 51 | .btn-primary { 52 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); 53 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); 54 | background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); 55 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 56 | background-repeat: repeat-x; 57 | border-color: #2d6ca2; 58 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 59 | } 60 | 61 | .btn-primary:active, 62 | .btn-primary.active { 63 | background-color: #3071a9; 64 | border-color: #2d6ca2; 65 | } 66 | 67 | .btn-success { 68 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); 69 | background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); 70 | background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); 71 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 72 | background-repeat: repeat-x; 73 | border-color: #419641; 74 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 75 | } 76 | 77 | .btn-success:active, 78 | .btn-success.active { 79 | background-color: #449d44; 80 | border-color: #419641; 81 | } 82 | 83 | .btn-warning { 84 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); 85 | background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); 86 | background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 87 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 88 | background-repeat: repeat-x; 89 | border-color: #eb9316; 90 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 91 | } 92 | 93 | .btn-warning:active, 94 | .btn-warning.active { 95 | background-color: #ec971f; 96 | border-color: #eb9316; 97 | } 98 | 99 | .btn-danger { 100 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); 101 | background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); 102 | background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); 103 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 104 | background-repeat: repeat-x; 105 | border-color: #c12e2a; 106 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 107 | } 108 | 109 | .btn-danger:active, 110 | .btn-danger.active { 111 | background-color: #c9302c; 112 | border-color: #c12e2a; 113 | } 114 | 115 | .btn-info { 116 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); 117 | background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); 118 | background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 119 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 120 | background-repeat: repeat-x; 121 | border-color: #2aabd2; 122 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 123 | } 124 | 125 | .btn-info:active, 126 | .btn-info.active { 127 | background-color: #31b0d5; 128 | border-color: #2aabd2; 129 | } 130 | 131 | .thumbnail, 132 | .img-thumbnail { 133 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 134 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 135 | } 136 | 137 | .dropdown-menu > li > a:hover, 138 | .dropdown-menu > li > a:focus, 139 | .dropdown-menu > .active > a, 140 | .dropdown-menu > .active > a:hover, 141 | .dropdown-menu > .active > a:focus { 142 | background-color: #357ebd; 143 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); 144 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); 145 | background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); 146 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 147 | background-repeat: repeat-x; 148 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 149 | } 150 | 151 | .navbar { 152 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8)); 153 | background-image: -webkit-linear-gradient(top, #ffffff, 0%, #f8f8f8, 100%); 154 | background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%); 155 | background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%); 156 | background-repeat: repeat-x; 157 | border-radius: 4px; 158 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0); 159 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 160 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075); 161 | } 162 | 163 | .navbar .navbar-nav > .active > a { 164 | background-color: #f8f8f8; 165 | } 166 | 167 | .navbar-brand, 168 | .navbar-nav > li > a { 169 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); 170 | } 171 | 172 | .navbar-inverse { 173 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222)); 174 | background-image: -webkit-linear-gradient(top, #3c3c3c, 0%, #222222, 100%); 175 | background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%); 176 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%); 177 | background-repeat: repeat-x; 178 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0); 179 | } 180 | 181 | .navbar-inverse .navbar-nav > .active > a { 182 | background-color: #222222; 183 | } 184 | 185 | .navbar-inverse .navbar-brand, 186 | .navbar-inverse .navbar-nav > li > a { 187 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); 188 | } 189 | 190 | .navbar-static-top, 191 | .navbar-fixed-top, 192 | .navbar-fixed-bottom { 193 | border-radius: 0; 194 | } 195 | 196 | .alert { 197 | text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2); 198 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 199 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); 200 | } 201 | 202 | .alert-success { 203 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc)); 204 | background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #c8e5bc, 100%); 205 | background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%); 206 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%); 207 | background-repeat: repeat-x; 208 | border-color: #b2dba1; 209 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0); 210 | } 211 | 212 | .alert-info { 213 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0)); 214 | background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #b9def0, 100%); 215 | background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%); 216 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%); 217 | background-repeat: repeat-x; 218 | border-color: #9acfea; 219 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0); 220 | } 221 | 222 | .alert-warning { 223 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0)); 224 | background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #f8efc0, 100%); 225 | background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%); 226 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%); 227 | background-repeat: repeat-x; 228 | border-color: #f5e79e; 229 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0); 230 | } 231 | 232 | .alert-danger { 233 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3)); 234 | background-image: -webkit-linear-gradient(top, #f2dede, 0%, #e7c3c3, 100%); 235 | background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%); 236 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%); 237 | background-repeat: repeat-x; 238 | border-color: #dca7a7; 239 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0); 240 | } 241 | 242 | .progress { 243 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5)); 244 | background-image: -webkit-linear-gradient(top, #ebebeb, 0%, #f5f5f5, 100%); 245 | background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%); 246 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%); 247 | background-repeat: repeat-x; 248 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0); 249 | } 250 | 251 | .progress-bar { 252 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9)); 253 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3071a9, 100%); 254 | background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%); 255 | background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%); 256 | background-repeat: repeat-x; 257 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0); 258 | } 259 | 260 | .progress-bar-success { 261 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44)); 262 | background-image: -webkit-linear-gradient(top, #5cb85c, 0%, #449d44, 100%); 263 | background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%); 264 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%); 265 | background-repeat: repeat-x; 266 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0); 267 | } 268 | 269 | .progress-bar-info { 270 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5)); 271 | background-image: -webkit-linear-gradient(top, #5bc0de, 0%, #31b0d5, 100%); 272 | background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%); 273 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%); 274 | background-repeat: repeat-x; 275 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0); 276 | } 277 | 278 | .progress-bar-warning { 279 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f)); 280 | background-image: -webkit-linear-gradient(top, #f0ad4e, 0%, #ec971f, 100%); 281 | background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%); 282 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%); 283 | background-repeat: repeat-x; 284 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0); 285 | } 286 | 287 | .progress-bar-danger { 288 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c)); 289 | background-image: -webkit-linear-gradient(top, #d9534f, 0%, #c9302c, 100%); 290 | background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%); 291 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%); 292 | background-repeat: repeat-x; 293 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0); 294 | } 295 | 296 | .list-group { 297 | border-radius: 4px; 298 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 299 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); 300 | } 301 | 302 | .list-group-item.active, 303 | .list-group-item.active:hover, 304 | .list-group-item.active:focus { 305 | text-shadow: 0 -1px 0 #3071a9; 306 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3)); 307 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #3278b3, 100%); 308 | background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%); 309 | background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%); 310 | background-repeat: repeat-x; 311 | border-color: #3278b3; 312 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0); 313 | } 314 | 315 | .panel { 316 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 317 | box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); 318 | } 319 | 320 | .panel-default > .panel-heading { 321 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8)); 322 | background-image: -webkit-linear-gradient(top, #f5f5f5, 0%, #e8e8e8, 100%); 323 | background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%); 324 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%); 325 | background-repeat: repeat-x; 326 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0); 327 | } 328 | 329 | .panel-primary > .panel-heading { 330 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd)); 331 | background-image: -webkit-linear-gradient(top, #428bca, 0%, #357ebd, 100%); 332 | background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%); 333 | background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%); 334 | background-repeat: repeat-x; 335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); 336 | } 337 | 338 | .panel-success > .panel-heading { 339 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6)); 340 | background-image: -webkit-linear-gradient(top, #dff0d8, 0%, #d0e9c6, 100%); 341 | background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%); 342 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%); 343 | background-repeat: repeat-x; 344 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0); 345 | } 346 | 347 | .panel-info > .panel-heading { 348 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3)); 349 | background-image: -webkit-linear-gradient(top, #d9edf7, 0%, #c4e3f3, 100%); 350 | background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%); 351 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%); 352 | background-repeat: repeat-x; 353 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0); 354 | } 355 | 356 | .panel-warning > .panel-heading { 357 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc)); 358 | background-image: -webkit-linear-gradient(top, #fcf8e3, 0%, #faf2cc, 100%); 359 | background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%); 360 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%); 361 | background-repeat: repeat-x; 362 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0); 363 | } 364 | 365 | .panel-danger > .panel-heading { 366 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc)); 367 | background-image: -webkit-linear-gradient(top, #f2dede, 0%, #ebcccc, 100%); 368 | background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%); 369 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%); 370 | background-repeat: repeat-x; 371 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0); 372 | } 373 | 374 | .well { 375 | background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5)); 376 | background-image: -webkit-linear-gradient(top, #e8e8e8, 0%, #f5f5f5, 100%); 377 | background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%); 378 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%); 379 | background-repeat: repeat-x; 380 | border-color: #dcdcdc; 381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0); 382 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 383 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1); 384 | } -------------------------------------------------------------------------------- /LICENSE-hardware: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | Attribution 3.0 Unported 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR 10 | DAMAGES RESULTING FROM ITS USE. 11 | 12 | License 13 | 14 | THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE 15 | COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY 16 | COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS 17 | AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. 18 | 19 | BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE 20 | TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY 21 | BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS 22 | CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND 23 | CONDITIONS. 24 | 25 | 1. Definitions 26 | 27 | a. "Adaptation" means a work based upon the Work, or upon the Work and 28 | other pre-existing works, such as a translation, adaptation, 29 | derivative work, arrangement of music or other alterations of a 30 | literary or artistic work, or phonogram or performance and includes 31 | cinematographic adaptations or any other form in which the Work may be 32 | recast, transformed, or adapted including in any form recognizably 33 | derived from the original, except that a work that constitutes a 34 | Collection will not be considered an Adaptation for the purpose of 35 | this License. For the avoidance of doubt, where the Work is a musical 36 | work, performance or phonogram, the synchronization of the Work in 37 | timed-relation with a moving image ("synching") will be considered an 38 | Adaptation for the purpose of this License. 39 | b. "Collection" means a collection of literary or artistic works, such as 40 | encyclopedias and anthologies, or performances, phonograms or 41 | broadcasts, or other works or subject matter other than works listed 42 | in Section 1(f) below, which, by reason of the selection and 43 | arrangement of their contents, constitute intellectual creations, in 44 | which the Work is included in its entirety in unmodified form along 45 | with one or more other contributions, each constituting separate and 46 | independent works in themselves, which together are assembled into a 47 | collective whole. A work that constitutes a Collection will not be 48 | considered an Adaptation (as defined above) for the purposes of this 49 | License. 50 | c. "Distribute" means to make available to the public the original and 51 | copies of the Work or Adaptation, as appropriate, through sale or 52 | other transfer of ownership. 53 | d. "Licensor" means the individual, individuals, entity or entities that 54 | offer(s) the Work under the terms of this License. 55 | e. "Original Author" means, in the case of a literary or artistic work, 56 | the individual, individuals, entity or entities who created the Work 57 | or if no individual or entity can be identified, the publisher; and in 58 | addition (i) in the case of a performance the actors, singers, 59 | musicians, dancers, and other persons who act, sing, deliver, declaim, 60 | play in, interpret or otherwise perform literary or artistic works or 61 | expressions of folklore; (ii) in the case of a phonogram the producer 62 | being the person or legal entity who first fixes the sounds of a 63 | performance or other sounds; and, (iii) in the case of broadcasts, the 64 | organization that transmits the broadcast. 65 | f. "Work" means the literary and/or artistic work offered under the terms 66 | of this License including without limitation any production in the 67 | literary, scientific and artistic domain, whatever may be the mode or 68 | form of its expression including digital form, such as a book, 69 | pamphlet and other writing; a lecture, address, sermon or other work 70 | of the same nature; a dramatic or dramatico-musical work; a 71 | choreographic work or entertainment in dumb show; a musical 72 | composition with or without words; a cinematographic work to which are 73 | assimilated works expressed by a process analogous to cinematography; 74 | a work of drawing, painting, architecture, sculpture, engraving or 75 | lithography; a photographic work to which are assimilated works 76 | expressed by a process analogous to photography; a work of applied 77 | art; an illustration, map, plan, sketch or three-dimensional work 78 | relative to geography, topography, architecture or science; a 79 | performance; a broadcast; a phonogram; a compilation of data to the 80 | extent it is protected as a copyrightable work; or a work performed by 81 | a variety or circus performer to the extent it is not otherwise 82 | considered a literary or artistic work. 83 | g. "You" means an individual or entity exercising rights under this 84 | License who has not previously violated the terms of this License with 85 | respect to the Work, or who has received express permission from the 86 | Licensor to exercise rights under this License despite a previous 87 | violation. 88 | h. "Publicly Perform" means to perform public recitations of the Work and 89 | to communicate to the public those public recitations, by any means or 90 | process, including by wire or wireless means or public digital 91 | performances; to make available to the public Works in such a way that 92 | members of the public may access these Works from a place and at a 93 | place individually chosen by them; to perform the Work to the public 94 | by any means or process and the communication to the public of the 95 | performances of the Work, including by public digital performance; to 96 | broadcast and rebroadcast the Work by any means including signs, 97 | sounds or images. 98 | i. "Reproduce" means to make copies of the Work by any means including 99 | without limitation by sound or visual recordings and the right of 100 | fixation and reproducing fixations of the Work, including storage of a 101 | protected performance or phonogram in digital form or other electronic 102 | medium. 103 | 104 | 2. Fair Dealing Rights. Nothing in this License is intended to reduce, 105 | limit, or restrict any uses free from copyright or rights arising from 106 | limitations or exceptions that are provided for in connection with the 107 | copyright protection under copyright law or other applicable laws. 108 | 109 | 3. License Grant. Subject to the terms and conditions of this License, 110 | Licensor hereby grants You a worldwide, royalty-free, non-exclusive, 111 | perpetual (for the duration of the applicable copyright) license to 112 | exercise the rights in the Work as stated below: 113 | 114 | a. to Reproduce the Work, to incorporate the Work into one or more 115 | Collections, and to Reproduce the Work as incorporated in the 116 | Collections; 117 | b. to create and Reproduce Adaptations provided that any such Adaptation, 118 | including any translation in any medium, takes reasonable steps to 119 | clearly label, demarcate or otherwise identify that changes were made 120 | to the original Work. For example, a translation could be marked "The 121 | original work was translated from English to Spanish," or a 122 | modification could indicate "The original work has been modified."; 123 | c. to Distribute and Publicly Perform the Work including as incorporated 124 | in Collections; and, 125 | d. to Distribute and Publicly Perform Adaptations. 126 | e. For the avoidance of doubt: 127 | 128 | i. Non-waivable Compulsory License Schemes. In those jurisdictions in 129 | which the right to collect royalties through any statutory or 130 | compulsory licensing scheme cannot be waived, the Licensor 131 | reserves the exclusive right to collect such royalties for any 132 | exercise by You of the rights granted under this License; 133 | ii. Waivable Compulsory License Schemes. In those jurisdictions in 134 | which the right to collect royalties through any statutory or 135 | compulsory licensing scheme can be waived, the Licensor waives the 136 | exclusive right to collect such royalties for any exercise by You 137 | of the rights granted under this License; and, 138 | iii. Voluntary License Schemes. The Licensor waives the right to 139 | collect royalties, whether individually or, in the event that the 140 | Licensor is a member of a collecting society that administers 141 | voluntary licensing schemes, via that society, from any exercise 142 | by You of the rights granted under this License. 143 | 144 | The above rights may be exercised in all media and formats whether now 145 | known or hereafter devised. The above rights include the right to make 146 | such modifications as are technically necessary to exercise the rights in 147 | other media and formats. Subject to Section 8(f), all rights not expressly 148 | granted by Licensor are hereby reserved. 149 | 150 | 4. Restrictions. The license granted in Section 3 above is expressly made 151 | subject to and limited by the following restrictions: 152 | 153 | a. You may Distribute or Publicly Perform the Work only under the terms 154 | of this License. You must include a copy of, or the Uniform Resource 155 | Identifier (URI) for, this License with every copy of the Work You 156 | Distribute or Publicly Perform. You may not offer or impose any terms 157 | on the Work that restrict the terms of this License or the ability of 158 | the recipient of the Work to exercise the rights granted to that 159 | recipient under the terms of the License. You may not sublicense the 160 | Work. You must keep intact all notices that refer to this License and 161 | to the disclaimer of warranties with every copy of the Work You 162 | Distribute or Publicly Perform. When You Distribute or Publicly 163 | Perform the Work, You may not impose any effective technological 164 | measures on the Work that restrict the ability of a recipient of the 165 | Work from You to exercise the rights granted to that recipient under 166 | the terms of the License. This Section 4(a) applies to the Work as 167 | incorporated in a Collection, but this does not require the Collection 168 | apart from the Work itself to be made subject to the terms of this 169 | License. If You create a Collection, upon notice from any Licensor You 170 | must, to the extent practicable, remove from the Collection any credit 171 | as required by Section 4(b), as requested. If You create an 172 | Adaptation, upon notice from any Licensor You must, to the extent 173 | practicable, remove from the Adaptation any credit as required by 174 | Section 4(b), as requested. 175 | b. If You Distribute, or Publicly Perform the Work or any Adaptations or 176 | Collections, You must, unless a request has been made pursuant to 177 | Section 4(a), keep intact all copyright notices for the Work and 178 | provide, reasonable to the medium or means You are utilizing: (i) the 179 | name of the Original Author (or pseudonym, if applicable) if supplied, 180 | and/or if the Original Author and/or Licensor designate another party 181 | or parties (e.g., a sponsor institute, publishing entity, journal) for 182 | attribution ("Attribution Parties") in Licensor's copyright notice, 183 | terms of service or by other reasonable means, the name of such party 184 | or parties; (ii) the title of the Work if supplied; (iii) to the 185 | extent reasonably practicable, the URI, if any, that Licensor 186 | specifies to be associated with the Work, unless such URI does not 187 | refer to the copyright notice or licensing information for the Work; 188 | and (iv) , consistent with Section 3(b), in the case of an Adaptation, 189 | a credit identifying the use of the Work in the Adaptation (e.g., 190 | "French translation of the Work by Original Author," or "Screenplay 191 | based on original Work by Original Author"). The credit required by 192 | this Section 4 (b) may be implemented in any reasonable manner; 193 | provided, however, that in the case of a Adaptation or Collection, at 194 | a minimum such credit will appear, if a credit for all contributing 195 | authors of the Adaptation or Collection appears, then as part of these 196 | credits and in a manner at least as prominent as the credits for the 197 | other contributing authors. For the avoidance of doubt, You may only 198 | use the credit required by this Section for the purpose of attribution 199 | in the manner set out above and, by exercising Your rights under this 200 | License, You may not implicitly or explicitly assert or imply any 201 | connection with, sponsorship or endorsement by the Original Author, 202 | Licensor and/or Attribution Parties, as appropriate, of You or Your 203 | use of the Work, without the separate, express prior written 204 | permission of the Original Author, Licensor and/or Attribution 205 | Parties. 206 | c. Except as otherwise agreed in writing by the Licensor or as may be 207 | otherwise permitted by applicable law, if You Reproduce, Distribute or 208 | Publicly Perform the Work either by itself or as part of any 209 | Adaptations or Collections, You must not distort, mutilate, modify or 210 | take other derogatory action in relation to the Work which would be 211 | prejudicial to the Original Author's honor or reputation. Licensor 212 | agrees that in those jurisdictions (e.g. Japan), in which any exercise 213 | of the right granted in Section 3(b) of this License (the right to 214 | make Adaptations) would be deemed to be a distortion, mutilation, 215 | modification or other derogatory action prejudicial to the Original 216 | Author's honor and reputation, the Licensor will waive or not assert, 217 | as appropriate, this Section, to the fullest extent permitted by the 218 | applicable national law, to enable You to reasonably exercise Your 219 | right under Section 3(b) of this License (right to make Adaptations) 220 | but not otherwise. 221 | 222 | 5. Representations, Warranties and Disclaimer 223 | 224 | UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR 225 | OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY 226 | KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, 227 | INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, 228 | FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF 229 | LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, 230 | WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION 231 | OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 232 | 233 | 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE 234 | LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR 235 | ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES 236 | ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS 237 | BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 238 | 239 | 7. Termination 240 | 241 | a. This License and the rights granted hereunder will terminate 242 | automatically upon any breach by You of the terms of this License. 243 | Individuals or entities who have received Adaptations or Collections 244 | from You under this License, however, will not have their licenses 245 | terminated provided such individuals or entities remain in full 246 | compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will 247 | survive any termination of this License. 248 | b. Subject to the above terms and conditions, the license granted here is 249 | perpetual (for the duration of the applicable copyright in the Work). 250 | Notwithstanding the above, Licensor reserves the right to release the 251 | Work under different license terms or to stop distributing the Work at 252 | any time; provided, however that any such election will not serve to 253 | withdraw this License (or any other license that has been, or is 254 | required to be, granted under the terms of this License), and this 255 | License will continue in full force and effect unless terminated as 256 | stated above. 257 | 258 | 8. Miscellaneous 259 | 260 | a. Each time You Distribute or Publicly Perform the Work or a Collection, 261 | the Licensor offers to the recipient a license to the Work on the same 262 | terms and conditions as the license granted to You under this License. 263 | b. Each time You Distribute or Publicly Perform an Adaptation, Licensor 264 | offers to the recipient a license to the original Work on the same 265 | terms and conditions as the license granted to You under this License. 266 | c. If any provision of this License is invalid or unenforceable under 267 | applicable law, it shall not affect the validity or enforceability of 268 | the remainder of the terms of this License, and without further action 269 | by the parties to this agreement, such provision shall be reformed to 270 | the minimum extent necessary to make such provision valid and 271 | enforceable. 272 | d. No term or provision of this License shall be deemed waived and no 273 | breach consented to unless such waiver or consent shall be in writing 274 | and signed by the party to be charged with such waiver or consent. 275 | e. This License constitutes the entire agreement between the parties with 276 | respect to the Work licensed here. There are no understandings, 277 | agreements or representations with respect to the Work not specified 278 | here. Licensor shall not be bound by any additional provisions that 279 | may appear in any communication from You. This License may not be 280 | modified without the mutual written agreement of the Licensor and You. 281 | f. The rights granted under, and the subject matter referenced, in this 282 | License were drafted utilizing the terminology of the Berne Convention 283 | for the Protection of Literary and Artistic Works (as amended on 284 | September 28, 1979), the Rome Convention of 1961, the WIPO Copyright 285 | Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 286 | and the Universal Copyright Convention (as revised on July 24, 1971). 287 | These rights and subject matter take effect in the relevant 288 | jurisdiction in which the License terms are sought to be enforced 289 | according to the corresponding provisions of the implementation of 290 | those treaty provisions in the applicable national law. If the 291 | standard suite of rights granted under applicable copyright law 292 | includes additional rights not granted under this License, such 293 | additional rights are deemed to be included in the License; this 294 | License is not intended to restrict the license of any rights under 295 | applicable law. 296 | 297 | 298 | Creative Commons Notice 299 | 300 | Creative Commons is not a party to this License, and makes no warranty 301 | whatsoever in connection with the Work. Creative Commons will not be 302 | liable to You or any party on any legal theory for any damages 303 | whatsoever, including without limitation any general, special, 304 | incidental or consequential damages arising in connection to this 305 | license. Notwithstanding the foregoing two (2) sentences, if Creative 306 | Commons has expressly identified itself as the Licensor hereunder, it 307 | shall have all rights and obligations of Licensor. 308 | 309 | Except for the limited purpose of indicating to the public that the 310 | Work is licensed under the CCPL, Creative Commons does not authorize 311 | the use by either party of the trademark "Creative Commons" or any 312 | related trademark or logo of Creative Commons without the prior 313 | written consent of Creative Commons. Any permitted use will be in 314 | compliance with Creative Commons' then-current trademark usage 315 | guidelines, as may be published on its website or otherwise made 316 | available upon request from time to time. For the avoidance of doubt, 317 | this trademark restriction does not form part of this License. 318 | 319 | Creative Commons may be contacted at http://creativecommons.org/. 320 | --------------------------------------------------------------------------------