@@ -109,3 +109,61 @@ PinStatus digitalRead(PinName pinName){
109
109
if ( index == variantPinCount ){ return LOW; }
110
110
return indexDigitalRead (index);
111
111
}
112
+
113
+ void indexShiftOut (pin_size_t data_index, pin_size_t clock_index, BitOrder bitOrder, uint8_t val){
114
+ for (uint8_t idx = 0 ; idx < 8 ; idx++) {
115
+ if (bitOrder == LSBFIRST) {
116
+ indexDigitalWrite (data_index, !!(val & (1 << idx)) ? HIGH : LOW);
117
+ }else {
118
+ indexDigitalWrite (data_index, !!(val & (1 << (7 - idx))) ? HIGH : LOW);
119
+ }
120
+ indexDigitalWrite (clock_index, HIGH);
121
+ indexDigitalWrite (clock_index, LOW);
122
+ }
123
+ }
124
+
125
+ void shiftOut (pin_size_t dataPinNumber, pin_size_t clockPinNumber, BitOrder bitOrder, uint8_t val){
126
+ pin_size_t data_index = pinIndexByNumber (dataPinNumber);
127
+ pin_size_t clock_index = pinIndexByNumber (dataPinNumber);
128
+ if ( data_index == variantPinCount ){ return ; }
129
+ if ( clock_index == variantPinCount ){ return ; }
130
+ indexShiftOut (data_index, clock_index, bitOrder, val);
131
+ }
132
+
133
+ void shiftOut (PinName dataPinName, PinName clockPinName, BitOrder bitOrder, uint8_t val){
134
+ pin_size_t data_index = pinIndexByName (dataPinName);
135
+ pin_size_t clock_index = pinIndexByName (clockPinName);
136
+ if ( data_index == variantPinCount ){ return ; }
137
+ if ( clock_index == variantPinCount ){ return ; }
138
+ indexShiftOut (data_index, clock_index, bitOrder, val);
139
+ }
140
+
141
+ pin_size_t indexShiftIn (pin_size_t data_index, pin_size_t clock_index, BitOrder bitOrder){
142
+ uint8_t value = 0 ;
143
+ for (uint8_t idx = 0 ; idx < 8 ; ++idx) {
144
+ indexDigitalWrite (clock_index, HIGH);
145
+ if (bitOrder == LSBFIRST){
146
+ value |= indexDigitalRead (data_index) << idx;
147
+ }else {
148
+ value |= indexDigitalRead (data_index) << (7 - idx);
149
+ }
150
+ indexDigitalWrite (clock_index, LOW);
151
+ }
152
+ return value;
153
+ }
154
+
155
+ pin_size_t shiftIn (pin_size_t dataPinNumber, pin_size_t clockPinNumber, BitOrder bitOrder){
156
+ pin_size_t data_index = pinIndexByNumber (dataPinNumber);
157
+ pin_size_t clock_index = pinIndexByNumber (clockPinNumber);
158
+ if ( data_index == variantPinCount ){ return 0x00 ; }
159
+ if ( clock_index == variantPinCount ){ return 0x00 ; }
160
+ return indexShiftIn (data_index, clock_index, bitOrder);
161
+ }
162
+
163
+ pin_size_t shiftIn (PinName dataPinName, PinName clockPinName, BitOrder bitOrder){
164
+ pin_size_t data_index = pinIndexByName (dataPinName);
165
+ pin_size_t clock_index = pinIndexByName (clockPinName);
166
+ if ( data_index == variantPinCount ){ return 0x00 ; }
167
+ if ( clock_index == variantPinCount ){ return 0x00 ; }
168
+ return indexShiftIn (data_index, clock_index, bitOrder);
169
+ }
0 commit comments