moved all to hardware subfolder

This commit is contained in:
King Kévin 2014-03-02 18:40:00 +01:00
parent 1216c2d089
commit f241bffcd2
11 changed files with 433 additions and 0 deletions

17
hardware/.gitignore vendored Normal file
View File

@ -0,0 +1,17 @@
TODO
*_v*.*.sch
*_v*.*.pcb
*.pdf
*.png
*~
\#*.sch\#
attribs
notes.txt
*.net
*.cmd
*.new.pcb
*.pcb-
*.pcb.bak
*.gbr
*.cnc
hardware-release*.tar.*

0
hardware/CHANGES.txt Normal file
View File

189
hardware/LICENSE.txt Normal file
View File

@ -0,0 +1,189 @@
CERN Open Hardware Licence v1.2
Preamble
Through this CERN Open Hardware Licence ("CERN OHL") version 1.2, CERN
wishes to provide a tool to foster collaboration and sharing among
hardware designers. The CERN OHL is copyright CERN. Anyone is welcome
to use the CERN OHL, in unmodified form only, for the distribution of
their own Open Hardware designs. Any other right is reserved. Release
of hardware designs under the CERN OHL does not constitute an
endorsement of the licensor or its designs nor does it imply any
involvement by CERN in the development of such designs.
1. Definitions
In this Licence, the following terms have the following meanings:
“Licence” means this CERN OHL.
“Documentation” means schematic diagrams, designs, circuit or circuit
board layouts, mechanical drawings, flow charts and descriptive text,
and other explanatory material that is explicitly stated as being made
available under the conditions of this Licence. The Documentation may
be in any medium, including but not limited to computer files and
representations on paper, film, or any other media.
“Documentation Location” means a location where the Licensor has
placed Documentation, and which he believes will be publicly
accessible for at least three years from the first communication to
the public or distribution of Documentation.
“Product” means either an entire, or any part of a, device built using
the Documentation or the modified Documentation.
“Licensee” means any natural or legal person exercising rights under
this Licence.
“Licensor” means any natural or legal person that creates or modifies
Documentation and subsequently communicates to the public and/ or
distributes the resulting Documentation under the terms and conditions
of this Licence.
A Licensee may at the same time be a Licensor, and vice versa.
Use of the masculine gender includes the feminine and neuter genders
and is employed solely to facilitate reading.
2. Applicability
2.1. This Licence governs the use, copying, modification,
communication to the public and distribution of the Documentation, and
the manufacture and distribution of Products. By exercising any right
granted under this Licence, the Licensee irrevocably accepts these
terms and conditions.
2.2. This Licence is granted by the Licensor directly to the Licensee,
and shall apply worldwide and without limitation in time. The Licensee
may assign his licence rights or grant sub-licences.
2.3. This Licence does not extend to software, firmware, or code
loaded into programmable devices which may be used in conjunction with
the Documentation, the modified Documentation or with Products, unless
such software, firmware, or code is explicitly expressed to be subject
to this Licence. The use of such software, firmware, or code is
otherwise subject to the applicable licence terms and conditions.
3. Copying, modification, communication to the public and distribution
of the Documentation
3.1. The Licensee shall keep intact all copyright and trademarks
notices, all notices referring to Documentation Location, and all
notices that refer to this Licence and to the disclaimer of warranties
that are included in the Documentation. He shall include a copy
thereof in every copy of the Documentation or, as the case may be,
modified Documentation, that he communicates to the public or
distributes.
3.2. The Licensee may copy, communicate to the public and distribute
verbatim copies of the Documentation, in any medium, subject to the
requirements specified in section 3.1.
3.3. The Licensee may modify the Documentation or any portion thereof
provided that upon modification of the Documentation, the Licensee
shall make the modified Documentation available from a Documentation
Location such that it can be easily located by an original Licensor
once the Licensee communicates to the public or distributes the
modified Documentation under section 3.4, and, where required by
section 4.1, by a recipient of a Product. However, the Licensor shall
not assert his rights under the foregoing proviso unless or until a
Product is distributed.
3.4. The Licensee may communicate to the public and distribute the
modified Documentation (thereby in addition to being a Licensee also
becoming a Licensor), always provided that he shall:
a) comply with section 3.1;
b) cause the modified Documentation to carry prominent notices stating
that the Licensee has modified the Documentation, with the date and
description of the modifications;
c) cause the modified Documentation to carry a new Documentation
Location notice if the original Documentation provided for one;
d) make available the modified Documentation at the same level of
abstraction as that of the Documentation, in the preferred format for
making modifications to it (e.g. the native format of the CAD tool as
applicable), and in the event that format is proprietary, in a format
viewable with a tool licensed under an OSI-approved license if the
proprietary tool can create it; and
e) license the modified Documentation under the terms and conditions
of this Licence or, where applicable, a later version of this Licence
as may be issued by CERN.
3.5. The Licence includes a non-exclusive licence to those patents or
registered designs that are held by, under the control of, or
sub-licensable by the Licensor, to the extent necessary to make use of
the rights granted under this Licence. The scope of this section 3.5
shall be strictly limited to the parts of the Documentation or
modified Documentation created by the Licensor.
4. Manufacture and distribution of Products
4.1. The Licensee may manufacture or distribute Products always
provided that, where such manufacture or distribution requires a
licence under this Licence the Licensee provides to each recipient of
such Products an easy means of accessing a copy of the Documentation
or modified Documentation, as applicable, as set out in section 3.
4.2. The Licensee is invited to inform any Licensor who has indicated
his wish to receive this information about the type, quantity and
dates of production of Products the Licensee has (had) manufactured
5. Warranty and liability
5.1. DISCLAIMER The Documentation and any modified Documentation are
provided "as is" and any express or implied warranties, including, but
not limited to, implied warranties of merchantability, of satisfactory
quality, non-infringement of third party rights, and fitness for a
particular purpose or use are disclaimed in respect of the
Documentation, the modified Documentation or any Product. The Licensor
makes no representation that the Documentation, modified
Documentation, or any Product, does or will not infringe any patent,
copyright, trade secret or other proprietary right. The entire risk as
to the use, quality, and performance of a Product shall be with the
Licensee and not the Licensor. This disclaimer of warranty is an
essential part of this Licence and a condition for the grant of any
rights granted under this Licence. The Licensee warrants that it does
not act in a consumer capacity.
5.2. LIMITATION OF LIABILITY The Licensor shall have no liability
for direct, indirect, special, incidental, consequential, exemplary,
punitive or other damages of any character including, without
limitation, procurement of substitute goods or services, loss of use,
data or profits, or business interruption, however caused and on any
theory of contract, warranty, tort (including negligence), product
liability or otherwise, arising in any way in relation to the
Documentation, modified Documentation and/or the use, manufacture or
distribution of a Product, even if advised of the possibility of such
damages, and the Licensee shall hold the Licensor(s) free and harmless
from any liability, costs, damages, fees and expenses, including
claims by third parties, in relation to such use.
6. General
6.1. Except for the rights explicitly granted hereunder, this Licence
does not imply or represent any transfer or assignment of intellectual
property rights to the Licensee.
6.2. The Licensee shall not use or make reference to any of the names
(including acronyms and abbreviations), images, or logos under which
the Licensor is known, save in so far as required to comply with
section 3. Any such permitted use or reference shall be factual and
shall in no event suggest any kind of endorsement by the Licensor or
its personnel of the modified Documentation or any Product, or any
kind of implication by the Licensor or its personnel in the
preparation of the modified Documentation or Product.
6.3. CERN may publish updated versions of this Licence which retain
the same general provisions as this version, but differ in detail so
far this is required and reasonable. New versions will be published
with a unique version number.
6.4. This Licence shall terminate with immediate effect, upon written
notice and without involvement of a court if the Licensee fails to
comply with any of its terms and conditions, or if the Licensee
initiates legal action against Licensor in relation to this
Licence. Section 5 shall continue to apply.

0
hardware/PRODUCT.txt Normal file
View File

218
hardware/Rakefile Normal file
View File

@ -0,0 +1,218 @@
require 'rake/clean'
# =================
# project variables
# =================
# main name used if filename
target = IO.read("name").split("\n")[0]
raise "define project name in 'name' file" unless target
# schema
sch = "#{target}.sch"
# pcb layout
pcb = "#{target}.pcb"
# project version, read from "version" file
version = IO.read("version").split("\n")[0]
raise "define project version in 'version' file" unless version
# current date for stamping output
date = Time.now.strftime("%Y-%m-%d")
# schematic revision, based on the number of schematic commits)
sch_rev = `git log --pretty=oneline "#{sch}" | wc -l`.chomp.to_i
# pcb layout revision, based on the number of pcb commits)
pcb_rev = `git log --pretty=oneline "#{pcb}" | wc -l`.chomp.to_i
# schema name with version and revition
vsch = "#{target}_v#{version}.#{sch_rev.to_s.rjust(3,'0')}.sch"
# pcb layout name with version and revition
vpcb = "#{target}_v#{version}.#{pcb_rev.to_s.rjust(3,'0')}.pcb"
# ==========
# main tasks
# ==========
desc "main building task"
task :default => [:version,:print,:notes,:photo,:gerber]
desc "create release file"
task :release => "hardware-release_v#{version}.tar.gz"
CLOBBER.include("hardware-release_v#{version}.tar.gz")
desc "set version in schematic and layout"
task :version => [vsch,vpcb]
CLEAN.include(vsch)
CLEAN.include(vpcb)
CLOBBER.include("#{target}_*.sch")
CLOBBER.include("#{target}_*.pcb")
desc "print schematic and layout (as pdf)"
task :print => ["#{target}_schematic.pdf","#{target}_layout.pdf"]
CLEAN.include("#{target}_schematic.pdf")
CLEAN.include("#{target}_layout.pdf")
desc "export notes from schematic"
task :notes => "notes.txt"
CLOBBER.include("notes.txt")
desc "verify schematic attributes"
task :verify => vsch do |t|
["value","footprint"].each do |attribute|
bom2(t.prerequisites[0],attribute).each do |data|
next unless data[attribute]=="unknown"
puts "#{attribute}s not defined for #{data[:refdes]*','}"
end
end
uniq = true
numbered = true
bom2(t.prerequisites[0],"refdes").each do |data|
uniq &= data[:refdes].size==1
numbered &= !data["refdes"].include?("?")
end
puts "not all refdes uniq" unless uniq
puts "not all refdes numbered" unless numbered
end
desc "convert schematic to pcb layout"
task :sch2pcb => vsch do |t|
sh "gsch2pcb #{t.prerequisites[0]} --elements-dir #{File.dirname(__FILE__)}/lib/footprints --skip-m4 --output-name #{target}"
end
PHOTOS = ["#{target}_layout-top.png","#{target}_layout-bottom.png"]
desc "render layout"
task :photo => PHOTOS
CLOBBER.include(PHOTOS)
GERBERS = [".top.gbr",".topmask.gbr",".toppaste.gbr",".topsilk.gbr",".bottom.gbr",".bottommask.gbr",".bottompaste.gbr",".bottomsilk.gbr",".outline.gbr",".fab.gbr",".plated-drill.cnc",".unplated-drill.cnc"].collect{|suffix| target+suffix}
desc "export gerber"
task :gerber => GERBERS
CLOBBER.include(GERBERS)
desc "reformat gerber and drill output (some programs like LPKF CircuitPro have difficulties with gEDA pcb output)"
task :reformat => GERBERS do
GERBERS.each do |gerber|
if gerber.end_with? ".gbr" then
sh "gerbv --export=rs274x --output=#{gerber} #{gerber}"
elsif gerber.end_with? ".cnc" then
sh "gerbv --export=drill --output=#{gerber} #{gerber}"
end
end
end
# ================
# helper functions
# ================
# generate gnetlist bom2 and parse them
# arguments: schematic=schematic to usse, attributes=the attributs to use for generating bom2
# return [{:refdes => [refdes of component], <attributes> => text of attributes}]
def bom2(schematic, attributes)
to_return = []
# force attributes to be an array
attributes = case attributes.class
when String
[attributes]
when Array
attributes
else
[attributes.to_s]
end
# create gnetlist backend
File.open("attribs","w") do |attribs|
attributes.each do |attribute|
attribs.puts attribute
end
end
# generate bom2
list = `gnetlist -g bom2 -q -o - #{schematic}`
# parse bom2
regex = /^(?<refdes>(\w+,?)+):(?<attributes>.*):(?<qty>\d+)$/
list.each_line do |line|
next unless line =~ regex
data = line.match regex
hash = {refdes: data[:refdes].split(',')}
attributes.each_index do |i|
hash.merge!({attributes[i] => data[:attributes].split(':')[i]})
end
to_return << hash
end
return to_return
end
CLEAN.include("attribs")
# ===============
# file generation
# ===============
desc "copy schematic to version it: include version, revision, and date"
file vsch => sch do |t|
sh "cp #{t.prerequisites.join(' ')} #{t.name}"
# on \ is to prevent ruby interpreting it, th other is for sed
# the version
sh "sed -i 's/\\(version=\\)\\$Version\\$/\\1#{version}/' #{t.name}"
# the date
sh "sed -i 's/\\(date=\\)\\$Date\\$/\\1#{date}/' #{t.name}"
# the revision
sh "sed -i 's/\\(revision=\\)\\$Revision\\$/\\1#{sch_rev}/' #{t.name}"
end
desc "copy layout to version it: include version, date, and run teardrops when available"
file vpcb => pcb do |t|
sh "cp #{t.prerequisites.join(' ')} #{t.name}"
# on \ is to prevent ruby interpreting it, th other is for sed
# the version and revision
version_revision = "v#{version}.#{pcb_rev.to_s.rjust(3,'0')}"
sh "sed -i 's/\\$version\\$/#{version_revision}/' #{t.name}"
# the date
sh "sed -i 's/\\$date\\$/#{date}/' #{t.name}"
# run teardrop for vias and pins
if File.exist? "#{Dir.home}/.pcb/plugins/teardrops.so" then
sh "pcb --action-string \"djopt(splitlines) Teardrops() s() q()\" #{t.name}"
end
end
desc "generate printable version (PDF) of schematic"
file "#{target}_schematic.pdf" => vsch do |t|
sh "gaf export -f pdf -c -o #{t.name} #{t.prerequisites.join(' ')} 2> /dev/null"
end
desc "generate printable documentation (PDF) from layout"
file "#{target}_layout.pdf" => vpcb do |t|
sh "pcb -x ps --psfile #{t.name}.ps #{t.prerequisites.join(' ')} 2> /dev/null"
sh "ps2pdf #{t.name}.ps #{t.name} 2> /dev/null"
sh "rm #{t.name}.ps 2> /dev/null"
end
desc "generate note file from schematic, listing the 'note' attributes from elements"
file "notes.txt" => vsch do |t|
notes_data = bom2(t.prerequisites[0],"note")
File.open(t.name,"w") do |notes_file|
notes_data.each do |note|
next if note["note"]=="unknown"
notes_file.puts "#{note[:refdes]*','}:\n#{note["note"]}\n\n"
end
end
end
desc "generate photo realistic picture from layout (front side)"
file "#{target}_layout-top.png" => vpcb do |t|
# sh "pcb -x png --dpi 600 --format PNG --photo-mode --outfile #{target}_layout-top.png #{t.prerequisites.join(' ')}"
sh "pcb -x png --format PNG --photo-mode --outfile #{target}_layout-top.png #{t.prerequisites.join(' ')}"
end
desc "generate photo realistic picture from layout (bottom side)"
file "#{target}_layout-bottom.png" => vpcb do |t|
# sh "pcb -x png --dpi 600 --format PNG --photo-mode --photo-flip-x --outfile #{target}_layout-bottom.png #{t.prerequisites.join(' ')}"
sh "pcb -x png --format PNG --photo-mode --photo-flip-x --outfile #{target}_layout-bottom.png #{t.prerequisites.join(' ')}"
end
desc "export gerber (and drill) files from layout"
GERBERS.each do |gerber|
file gerber => vpcb do |t|
puts "make #{t.name}"
sh "pcb -x gerber --gerberfile #{target} --all-layers #{t.prerequisites.join(' ')}"
end
end
ATTACHMENTS = ["cern_ohl_v_1_2_howto.pdf","CHANGES.txt","LICENSE.txt","PRODUCT.txt"]
desc "create archive with release files"
file "hardware-release_v#{version}.tar.gz" => ATTACHMENTS+["lib",vsch,vpcb,"notes.txt","#{target}_schematic.pdf","#{target}_layout.pdf","#{target}_layout-top.png","#{target}_layout-bottom.png"]+GERBERS do |t|
sh "tar -acf '#{t.name}' #{t.prerequisites.join(' ')}"
end

4
hardware/gafrc Normal file
View File

@ -0,0 +1,4 @@
; .sch gEDA configuration file
(define library "lib")
(component-library (build-path library "symbols"))
(component-library (build-path library "footprints"))

3
hardware/gschemrc Normal file
View File

@ -0,0 +1,3 @@
; gschem configuration file
(paper-size 11.69 8.27) ; A4
;(output-color "enabled") ; for color postscript output (black background)

1
hardware/lib/footprints/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
*.fp-

1
hardware/lib/symbols/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
\#*.sym\#

0
hardware/name Normal file
View File

0
hardware/version Normal file
View File