/** * Checks, if the a trace line with shape p_shape and net numbers p_net_no_arr and clearance class * p_cl_class can be inserted on layer p_layer without clearance violation. If p_contact_pins != * null, all pins not contained in p_contact_pins are regarded as obstacles, even if they are of * the own net. */ public boolean check_trace_shape( TileShape p_shape, int p_layer, int[] p_net_no_arr, int p_cl_class, Set<Pin> p_contact_pins) { if (!p_shape.is_contained_in(bounding_box)) { return false; } ShapeSearchTree default_tree = this.search_tree_manager.get_default_tree(); Collection<TreeEntry> tree_entries = new LinkedList<TreeEntry>(); int[] ignore_net_nos = new int[0]; if (default_tree.is_clearance_compensation_used()) { default_tree.overlapping_tree_entries(p_shape, p_layer, ignore_net_nos, tree_entries); } else { default_tree.overlapping_tree_entries_with_clearance( p_shape, p_layer, ignore_net_nos, p_cl_class, tree_entries); } for (TreeEntry curr_tree_entry : tree_entries) { if (!(curr_tree_entry.object instanceof Item)) { continue; } Item curr_item = (Item) curr_tree_entry.object; if (p_contact_pins != null) { if (p_contact_pins.contains(curr_item)) { continue; } if (curr_item instanceof Pin) { // The contact pins of the trace should be contained in p_ignore_items. // Other pins are handled as obstacles to avoid acid traps. return false; } } boolean is_obstacle = true; for (int i = 0; i < p_net_no_arr.length; ++i) { if (!curr_item.is_trace_obstacle(p_net_no_arr[i])) { is_obstacle = false; } } if (is_obstacle && (curr_item instanceof PolylineTrace) && p_contact_pins != null) { // check for traces of foreign nets at tie pins, which will be ignored inside the pin shape TileShape intersection = null; for (Pin curr_contact_pin : p_contact_pins) { if (curr_contact_pin.net_count() <= 1 || !curr_contact_pin.shares_net(curr_item)) { continue; } if (intersection == null) { TileShape obstacle_trace_shape = curr_item.get_tile_shape(curr_tree_entry.shape_index_in_object); intersection = p_shape.intersection(obstacle_trace_shape); } TileShape pin_shape = curr_contact_pin.get_tile_shape_on_layer(p_layer); if (pin_shape.contains_approx(intersection)) { is_obstacle = false; break; } } } if (is_obstacle) { return false; } } return true; }
private RelativeLayout createPin() { final RelativeLayout pinLayout = new RelativeLayout(getContext()); pinLayout.setVisibility(View.INVISIBLE); final Pin pin = new Pin(getContext()); pin.setId(ID_PIN); final RelativeLayout.LayoutParams pinParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); pinParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); pinParams.addRule(RelativeLayout.ALIGN_BOTTOM, ID_PIN_TEXT); pinParams.addRule(RelativeLayout.ALIGN_TOP, ID_PIN_TEXT); pin.setLayoutParams(pinParams); pinLayout.addView(pin); final TextView indicatorTextView = new TextView(getContext()); indicatorTextView.setId(ID_PIN_TEXT); final RelativeLayout.LayoutParams indicatorParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); indicatorParams.addRule(RelativeLayout.LEFT_OF, ID_PIN); indicatorTextView.setLayoutParams(indicatorParams); indicatorTextView.setTextColor(Color.WHITE); indicatorTextView.setGravity(Gravity.CENTER); indicatorTextView.setBackgroundColor(GREY_LIGHT); pinLayout.addView(indicatorTextView); return pinLayout; }
/** Returns the list of all pins on the board with only 1 layer */ public Collection<Pin> get_smd_pins() { Collection<Pin> result = new LinkedList<Pin>(); Iterator<UndoableObjects.UndoableObjectNode> it = item_list.start_read_object(); for (; ; ) { UndoableObjects.Storable curr_item = item_list.read_object(it); if (curr_item == null) { break; } if (curr_item instanceof Pin) { Pin curr_pin = (Pin) curr_item; if (curr_pin.first_layer() == curr_pin.last_layer()) { result.add(curr_pin); } } } return result; }
public static void init() { Add.init(); Address.init(); Align.init(); Alloc.init(); Anchor.init(); And.init(); Bad.init(); Bitcast.init(); Block.init(); Builtin.init(); Call.init(); Cmp.init(); Cond.init(); Confirm.init(); Const.init(); Conv.init(); CopyB.init(); Deleted.init(); Div.init(); Dummy.init(); End.init(); Eor.init(); Free.init(); IJmp.init(); Id.init(); Jmp.init(); Load.init(); Member.init(); Minus.init(); Mod.init(); Mul.init(); Mulh.init(); Mux.init(); NoMem.init(); Not.init(); Offset.init(); Or.init(); Phi.init(); Pin.init(); Proj.init(); Raise.init(); Return.init(); Sel.init(); Shl.init(); Shr.init(); Shrs.init(); Size.init(); Start.init(); Store.init(); Sub.init(); Switch.init(); Sync.init(); Tuple.init(); Unknown.init(); }
@Override public PinState getState(Pin pin) { super.getState(pin); // return pin state PinState state = null; int ret = com.pi4j.wmtgpio.Gpio.digitalRead(pin.getAddress()); if (ret >= 0) { state = PinState.getState(ret); } return state; }
public static Pin getPin(String pinName) { for (Pin pin : Pin.values()) { if (pin.getValueString().equalsIgnoreCase(pinName.trim())) return pin; else if (pin.getName().equalsIgnoreCase(pinName.trim())) return pin; else if (pin.hasAltFunction() && pin.getAltFunction().equalsIgnoreCase(pinName.trim())) return pin; } return null; }
@Override public void setState(Pin pin, PinState state) { super.setState(pin, state); com.pi4j.wmtgpio.Gpio.digitalWrite(pin.getAddress(), state.getValue()); }
public static Pin getPin(int pinNumber) { for (Pin pin : Pin.values()) { if (pin.getValue() == pinNumber) return pin; } return null; }
public static Pin[] allPins() { return Pin.values(); }