moved all to hardware subfolder
This commit is contained in:
parent
1216c2d089
commit
f241bffcd2
|
@ -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,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,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
|
|
@ -0,0 +1,4 @@
|
|||
; .sch gEDA configuration file
|
||||
(define library "lib")
|
||||
(component-library (build-path library "symbols"))
|
||||
(component-library (build-path library "footprints"))
|
|
@ -0,0 +1,3 @@
|
|||
; gschem configuration file
|
||||
(paper-size 11.69 8.27) ; A4
|
||||
;(output-color "enabled") ; for color postscript output (black background)
|
|
@ -0,0 +1 @@
|
|||
*.fp-
|
|
@ -0,0 +1 @@
|
|||
\#*.sym\#
|
Loading…
Reference in New Issue