Collections of BERTL libraries
hl_bertl_portex.cpp@3:1708f20fd55b, 2016-04-18 (annotated)
- Committer:
- DongExpander
- Date:
- Mon Apr 18 12:48:42 2016 +0000
- Revision:
- 3:1708f20fd55b
- Parent:
- 1:b924729b5734
Feature; Added initialize()
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
DongExpander | 1:b924729b5734 | 1 | #include "mbed.h" |
DongExpander | 1:b924729b5734 | 2 | #include "hl_bertl_portex.h" |
DongExpander | 1:b924729b5734 | 3 | |
DongExpander | 1:b924729b5734 | 4 | PortEx::PortEx() : |
DongExpander | 1:b924729b5734 | 5 | _i2c(p28,p27), _p6Event(p6) |
DongExpander | 1:b924729b5734 | 6 | { |
DongExpander | 1:b924729b5734 | 7 | btns=btnEvent=0; |
DongExpander | 1:b924729b5734 | 8 | useISR = 1; |
DongExpander | 1:b924729b5734 | 9 | } |
DongExpander | 1:b924729b5734 | 10 | |
DongExpander | 1:b924729b5734 | 11 | void PortEx::Init() |
DongExpander | 1:b924729b5734 | 12 | { |
DongExpander | 1:b924729b5734 | 13 | char cmd[4]; |
DongExpander | 1:b924729b5734 | 14 | _i2c.frequency(100000); |
DongExpander | 1:b924729b5734 | 15 | wait(0.01); |
DongExpander | 1:b924729b5734 | 16 | // Port0 Config Port0 Out Port1 In |
DongExpander | 1:b924729b5734 | 17 | cmd[0]=0x06; |
DongExpander | 1:b924729b5734 | 18 | cmd[1]=0x00; |
DongExpander | 1:b924729b5734 | 19 | cmd[2]=0xFF; |
DongExpander | 1:b924729b5734 | 20 | _i2c.write(DEV, cmd, 3, false); |
DongExpander | 1:b924729b5734 | 21 | SetLedPort(0); |
DongExpander | 1:b924729b5734 | 22 | _p6Event.fall(this, &PortEx::p6ISR); |
DongExpander | 1:b924729b5734 | 23 | } |
DongExpander | 1:b924729b5734 | 24 | |
DongExpander | 1:b924729b5734 | 25 | void PortEx::p6ISR() |
DongExpander | 1:b924729b5734 | 26 | { |
DongExpander | 1:b924729b5734 | 27 | if( !useISR ) |
DongExpander | 1:b924729b5734 | 28 | return; |
DongExpander | 1:b924729b5734 | 29 | int16_t prev = btns; |
DongExpander | 1:b924729b5734 | 30 | ReadButtons(); |
DongExpander | 1:b924729b5734 | 31 | if( !btns ) |
DongExpander | 1:b924729b5734 | 32 | btns = prev; |
DongExpander | 1:b924729b5734 | 33 | else |
DongExpander | 1:b924729b5734 | 34 | btnEvent = 1; |
DongExpander | 1:b924729b5734 | 35 | } |
DongExpander | 1:b924729b5734 | 36 | |
DongExpander | 1:b924729b5734 | 37 | void PortEx::SetLedPort(uint8_t aBitPattern) |
DongExpander | 1:b924729b5734 | 38 | { |
DongExpander | 1:b924729b5734 | 39 | char cmd[4]; |
DongExpander | 1:b924729b5734 | 40 | cmd[0]=2; |
DongExpander | 1:b924729b5734 | 41 | cmd[1]=~aBitPattern; |
DongExpander | 1:b924729b5734 | 42 | _i2c.write(DEV, cmd, 2, false); |
DongExpander | 1:b924729b5734 | 43 | } |
DongExpander | 1:b924729b5734 | 44 | |
DongExpander | 1:b924729b5734 | 45 | void PortEx::SetLeds(uint8_t aBitPattern) |
DongExpander | 1:b924729b5734 | 46 | { |
DongExpander | 1:b924729b5734 | 47 | _currLeds |= aBitPattern; |
DongExpander | 1:b924729b5734 | 48 | SetLedPort(_currLeds); |
DongExpander | 1:b924729b5734 | 49 | } |
DongExpander | 1:b924729b5734 | 50 | |
DongExpander | 1:b924729b5734 | 51 | void PortEx::ToggleLeds(uint8_t aBitPattern) |
DongExpander | 1:b924729b5734 | 52 | { |
DongExpander | 1:b924729b5734 | 53 | _currLeds ^= aBitPattern; |
DongExpander | 1:b924729b5734 | 54 | SetLedPort(_currLeds); |
DongExpander | 1:b924729b5734 | 55 | } |
DongExpander | 1:b924729b5734 | 56 | |
DongExpander | 1:b924729b5734 | 57 | void PortEx::ClearLeds() |
DongExpander | 1:b924729b5734 | 58 | { |
DongExpander | 1:b924729b5734 | 59 | _currLeds=0; |
DongExpander | 1:b924729b5734 | 60 | SetLedPort(0); |
DongExpander | 1:b924729b5734 | 61 | } |
DongExpander | 1:b924729b5734 | 62 | |
DongExpander | 1:b924729b5734 | 63 | |
DongExpander | 1:b924729b5734 | 64 | void PortEx::ReadButtons() |
DongExpander | 1:b924729b5734 | 65 | { |
DongExpander | 1:b924729b5734 | 66 | char cmd[4]; |
DongExpander | 1:b924729b5734 | 67 | cmd[0]=1; |
DongExpander | 1:b924729b5734 | 68 | _i2c.write(DEV, cmd, 1, true); |
DongExpander | 1:b924729b5734 | 69 | _i2c.read(DEV|1, cmd, 1, false); |
DongExpander | 1:b924729b5734 | 70 | btns = cmd[0]; |
DongExpander | 1:b924729b5734 | 71 | } |
DongExpander | 1:b924729b5734 | 72 | |
DongExpander | 1:b924729b5734 | 73 | void PortEx::WaitUntilButtonPressed() |
DongExpander | 1:b924729b5734 | 74 | { |
DongExpander | 1:b924729b5734 | 75 | int prev = useISR; |
DongExpander | 1:b924729b5734 | 76 | useISR = 0; |
DongExpander | 1:b924729b5734 | 77 | btns = 0; |
DongExpander | 1:b924729b5734 | 78 | while(1) { |
DongExpander | 1:b924729b5734 | 79 | ReadButtons(); |
DongExpander | 1:b924729b5734 | 80 | if( btns ) |
DongExpander | 1:b924729b5734 | 81 | break; |
DongExpander | 1:b924729b5734 | 82 | wait(0.01); |
DongExpander | 1:b924729b5734 | 83 | } |
DongExpander | 1:b924729b5734 | 84 | btns=btnEvent=0; |
DongExpander | 1:b924729b5734 | 85 | useISR = prev; |
DongExpander | 1:b924729b5734 | 86 | } |
DongExpander | 1:b924729b5734 | 87 | |
DongExpander | 1:b924729b5734 | 88 | void PortEx::WaitUntilFrontButtonPressed() |
DongExpander | 1:b924729b5734 | 89 | { |
DongExpander | 1:b924729b5734 | 90 | int prev = useISR; |
DongExpander | 1:b924729b5734 | 91 | useISR = 0; |
DongExpander | 1:b924729b5734 | 92 | btns = 0; |
DongExpander | 1:b924729b5734 | 93 | while(1) { |
DongExpander | 1:b924729b5734 | 94 | ReadButtons(); |
DongExpander | 1:b924729b5734 | 95 | if( IsAnyFrontButton() ) |
DongExpander | 1:b924729b5734 | 96 | break; |
DongExpander | 1:b924729b5734 | 97 | wait(0.01); |
DongExpander | 1:b924729b5734 | 98 | } |
DongExpander | 1:b924729b5734 | 99 | btns=btnEvent=0; |
DongExpander | 1:b924729b5734 | 100 | useISR = prev; |
DongExpander | 1:b924729b5734 | 101 | } |
DongExpander | 1:b924729b5734 | 102 |