public void SetLED(BIPLedPositionEnum bipLedPositionEnum, PanelLEDColor panelLEDColor) { try { var row = GetRow(bipLedPositionEnum); var index = GetIndex(bipLedPositionEnum); byte[] array = { 0x0 }; byte mask = 0; switch (row) { case 1: { array = _upperRowBytes; break; } case 2: { array = _middleRowBytes; break; } case 3: { array = _lowerRowBytes; break; } } switch (index) { case 1: { mask = _1BIPMask; break; } case 2: { mask = _2BIPMask; break; } case 3: { mask = _3BIPMask; break; } case 4: { mask = _4BIPMask; break; } case 5: { mask = _5BIPMask; break; } case 6: { mask = _6BIPMask; break; } case 7: { mask = _7BIPMask; break; } case 8: { mask = _8BIPMask; break; } } switch (panelLEDColor) { case PanelLEDColor.DARK: { //Set all to 0 array[0] = (array[0] &= (byte)~mask); array[1] = (array[1] &= (byte)~mask); break; } case PanelLEDColor.GREEN: { //Set first byte's bit to 1 array[0] = array[0] |= mask; array[1] = (array[1] &= (byte)~mask); break; } case PanelLEDColor.YELLOW: { //Set both byte's bit to 1 array[0] = array[0] |= mask; array[1] = array[1] |= mask; break; } case PanelLEDColor.RED: { //Set second byte's bit to 1 array[0] = (array[0] &= (byte)~mask); array[1] = array[1] |= mask; break; } } /* * 01000000 2nd BIP from left GREEN * 00000000 * * 01000000 2nd BIP from left YELLOW * 01000000 * * 00000000 2nd BIP from left RED * 01000000 * * 00000000 2nd BIP from left DARK * 00000000 * */ //_upperRowBytes = { (byte)0x0, (byte)0x0 }; //byte 1 & 4 //_middleRowBytes = { (byte)0x0, (byte)0x0 };//byte 2 & 5 //_lowerRowBytes = { (byte)0x0, (byte)0x0 }; //byte 3 & 6 var finalArray = new byte[7]; finalArray[0] = 0xb8; finalArray[1] = _upperRowBytes[0]; finalArray[2] = _middleRowBytes[0]; finalArray[3] = _lowerRowBytes[0]; finalArray[4] = _upperRowBytes[1]; finalArray[5] = _middleRowBytes[1]; finalArray[6] = _lowerRowBytes[1]; SendLEDData(finalArray); } catch (Exception ex) { Common.ShowErrorMessageBox(ex); } }
public int GetRow(BIPLedPositionEnum bipLedPositionEnum) { //Position_1_1 return(int.Parse(bipLedPositionEnum.ToString().Remove(0, 9).Substring(0, 1))); }
public PanelLEDColor GetColor(BIPLedPositionEnum bipLedPositionEnum) { try { var row = GetRow(bipLedPositionEnum); var index = GetIndex(bipLedPositionEnum); byte[] array = { 0x0 }; byte mask = 0; switch (row) { case 1: { array = _upperRowBytes; break; } case 2: { array = _middleRowBytes; break; } case 3: { array = _lowerRowBytes; break; } } switch (index) { case 1: { mask = _1BIPMask; break; } case 2: { mask = _2BIPMask; break; } case 3: { mask = _3BIPMask; break; } case 4: { mask = _4BIPMask; break; } case 5: { mask = _5BIPMask; break; } case 6: { mask = _6BIPMask; break; } case 7: { mask = _7BIPMask; break; } case 8: { mask = _8BIPMask; break; } } //[0] & [1] == 0 --> DARK //[0] == 1, [1] == 0 --> GREEN //[0] == 1, [1] == 1 --> YELLOW //[0] == 0, [1] == 1 --> RED if ((array[0] & mask) > 1) { if ((array[1] & mask) < 1) { return(PanelLEDColor.GREEN); } if ((array[1] & mask) > 1) { return(PanelLEDColor.YELLOW); } } if ((array[0] & mask) < 1) { if ((array[1] & mask) < 1) { return(PanelLEDColor.DARK); } if ((array[1] & mask) > 1) { return(PanelLEDColor.RED); } } } catch (Exception ex) { Common.LogError(ex); } return(PanelLEDColor.RED); }
public string GetPosString(BIPLedPositionEnum bipLedPositionEnum) { //Position_1_1 return(bipLedPositionEnum.ToString().Replace("Position_", "")); //1_1 }
public PanelLEDColor GetColor(BIPLedPositionEnum bipLedPositionEnum) { try { var row = GetRow(bipLedPositionEnum); var index = GetIndex(bipLedPositionEnum); byte[] array = { 0x0 }; byte mask = 0; switch (row) { case 1: { array = _upperRowBytes; break; } case 2: { array = _middleRowBytes; break; } case 3: { array = _lowerRowBytes; break; } } switch (index) { case 1: { mask = _1BIPMask; break; } case 2: { mask = _2BIPMask; break; } case 3: { mask = _3BIPMask; break; } case 4: { mask = _4BIPMask; break; } case 5: { mask = _5BIPMask; break; } case 6: { mask = _6BIPMask; break; } case 7: { mask = _7BIPMask; break; } case 8: { mask = _8BIPMask; break; } } /* * 14 Jan 2022 * Very weird problem, without this delay the panel GUI would show the previous color instead of current. * As if it had a reference to the array as it was before the change. Can't figure this out. Just a workaround. */ Thread.Sleep(1); // [0] & [1] == 0 --> DARK // [0] == 1, [1] == 0 --> GREEN // [0] == 1, [1] == 1 --> YELLOW // [0] == 0, [1] == 1 --> RED if ((array[0] & mask) > 1) { if ((array[1] & mask) < 1) { //Debug.WriteLine(bipLedPositionEnum + " is currently GREEN"); return(PanelLEDColor.GREEN); } if ((array[1] & mask) > 1) { //Debug.WriteLine(bipLedPositionEnum + " is currently YELLOW"); return(PanelLEDColor.YELLOW); } } if ((array[0] & mask) < 1) { if ((array[1] & mask) < 1) { //Debug.WriteLine(bipLedPositionEnum + " is currently DARK"); return(PanelLEDColor.DARK); } if ((array[1] & mask) > 1) { //Debug.WriteLine(bipLedPositionEnum + " is currently RED"); return(PanelLEDColor.RED); } } } catch (Exception ex) { logger.Error(ex); } return(PanelLEDColor.RED); }