11#include " CEC_Device.h"
22#include < Arduino.h>
33
4+ #if defined(ARDUINO_ARCH_STM32F1) || defined(ARDUINO_ARCH_STM32F2) || defined(ARDUINO_ARCH_STM32F3) || defined(ARDUINO_ARCH_STM32F4)
5+ # define STM32
6+ # define CEC_HIGH 1
7+ # define CEC_LOW 0
8+ #else
9+ # define CEC_HIGH LOW
10+ # define CEC_LOW HIGH
11+ #endif
12+
413CEC_Device::CEC_Device (int physicalAddress, int in_line, int out_line)
514: CEC_LogicalDevice(physicalAddress)
615, _isrTriggered(false )
@@ -12,10 +21,15 @@ CEC_Device::CEC_Device(int physicalAddress, int in_line, int out_line)
1221
1322void CEC_Device::Initialize (CEC_DEVICE_TYPE type)
1423{
24+ #ifdef STM32
25+ gpio_set_mode (digitalPinToPort (_in_line), PIN_MAP[_in_line].gpio_bit , GPIO_OUTPUT_OD); // set open drain output
26+ _out_line = _in_line;
27+ #else
1528 pinMode (_out_line, OUTPUT);
1629 pinMode ( _in_line, INPUT);
30+ #endif
1731
18- digitalWrite (_out_line, LOW );
32+ digitalWrite (_out_line, CEC_HIGH );
1933 delay (200 );
2034
2135 CEC_LogicalDevice::Initialize (type);
@@ -42,12 +56,12 @@ void CEC_Device::OnReceive(int source, int dest, unsigned char* buffer, int coun
4256bool CEC_Device::LineState ()
4357{
4458 int state = digitalRead (_in_line);
45- return state == LOW ;
59+ return state == CEC_HIGH ;
4660}
4761
4862void CEC_Device::SetLineState (bool state)
4963{
50- digitalWrite (_out_line, state?LOW:HIGH );
64+ digitalWrite (_out_line, state?CEC_HIGH:CEC_LOW );
5165 // give enough time for the line to settle before sampling
5266 // it
5367 delayMicroseconds (50 );
0 commit comments