示例#1
0
 /**
  * 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;
 }
示例#2
0
  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;
  }
示例#3
0
 /** 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;
 }
示例#4
0
文件: Nodes.java 项目: MatzeB/jFirm
 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();
 }
示例#5
0
  @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;
  }
示例#6
0
文件: Pin.java 项目: xranby/pi4j
 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;
 }
示例#7
0
  @Override
  public void setState(Pin pin, PinState state) {
    super.setState(pin, state);

    com.pi4j.wmtgpio.Gpio.digitalWrite(pin.getAddress(), state.getValue());
  }
示例#8
0
文件: Pin.java 项目: xranby/pi4j
 public static Pin getPin(int pinNumber) {
   for (Pin pin : Pin.values()) {
     if (pin.getValue() == pinNumber) return pin;
   }
   return null;
 }
示例#9
0
文件: Pin.java 项目: xranby/pi4j
 public static Pin[] allPins() {
   return Pin.values();
 }