diff --git a/sbs.conf b/sbs.conf index ab0c9ccba8cf67682274e7c0621458f382054ec2..48ad7550a9bb69c2f55665362bb184f56c75599c 100644 --- a/sbs.conf +++ b/sbs.conf @@ -328,6 +328,14 @@ Include: %shared %canbus Defines: -DDEBUG Main: test-canproxy +[test-canproxy-slave] +Type: test +BoardId: stm32f103cb_skyward_strain_board +BinName: test-canproxy +Include: %shared %canbus +Defines: -DDEBUG -DIS_SLAVE +Main: test-canproxy + [test-logproxy] Type: test BoardId: stm32f429zi_skyward_death_stack diff --git a/src/boards/StrainBoard/StrainBoard.h b/src/boards/StrainBoard/StrainBoard.h index 46d1242c76bfc0c1245472089d197289fa092b22..5dd91345754fb94f61039cf046a71397cc93a398 100644 --- a/src/boards/StrainBoard/StrainBoard.h +++ b/src/boards/StrainBoard/StrainBoard.h @@ -49,13 +49,11 @@ public: // Setup CAN can_proxy.addHandler(this); - canbus_init_t init = - canbus_init_t{CAN1, - miosix::Mode::ALTERNATE, - 0, - {USB_LP_CAN1_RX0_IRQn, CAN1_RX1_IRQn}}; + CanConfig config = { + CAN1, CanTimings::forTqBaud(12, 50000), {USB_LP_CAN1_RX0_IRQn, CAN1_RX1_IRQn} + }; - can_proxy.setupBus<GPIOA_BASE, 11, 12>(init, 0); + can_proxy.setupBus(config, 0); // Init ADC adc.init(); @@ -90,7 +88,17 @@ private: sendHeartbeat(); break; - // TODO: Missing states + // TODO(events): Actual events + case 69: + adc.setChannel(ADCAdapter::Channel::PRIMARY); + sampler.sampleBulk(); + break; + + // TODO(events): Actual events + case 42: + adc.setChannel(ADCAdapter::Channel::SECONDARY); + sampler.sampleBulk(); + break; } } diff --git a/src/boards/shared/canbus/CanProxy.h b/src/boards/shared/canbus/CanProxy.h index 04baa9eb02249c1f22032f76dba3266b7f14d2ec..d0d049336b874d43f88071fc325f9e6c2ba632c5 100644 --- a/src/boards/shared/canbus/CanProxy.h +++ b/src/boards/shared/canbus/CanProxy.h @@ -95,14 +95,13 @@ public: /// an heap allocated instance if this cannot be guaranteed! /// /// @param can_id The id of the configured CAN bus in CanManager. - template <uint32_t gpio, uint8_t rx, uint8_t tx> - void setupBus(const canbus_init_t &i, uint32_t can_id) + void setupBus(const CanConfig &config, uint32_t can_id) { #ifdef DEBUG assert(bus == NULL && "setupBus already called!"); #endif - mgr->addBus<gpio, rx, tx>(i, [=](CanMsg can_msg, CanStatus status) { + mgr->addBus(config, [=](CanMsg can_msg, CanStatus status) { this->canDispatcher(can_msg, status); }); diff --git a/src/tests/strainboard/test-all-strainboard-master.cpp b/src/tests/strainboard/test-all-strainboard-master.cpp index f0a4a9b5200ec26ba518ede64577235bad6c4e68..ae9c0b6b6a9148b97b2dad928923f75808c18517 100644 --- a/src/tests/strainboard/test-all-strainboard-master.cpp +++ b/src/tests/strainboard/test-all-strainboard-master.cpp @@ -82,7 +82,8 @@ int menu() printf("--------------------\n"); printf("Insert a number:\n"); printf("1 - Request heartbeat\n"); - // TODO: Missing states + printf("2 - Request sample primary\n"); + printf("3 - Request sample secondary\n"); printf("\n"); printf(">> "); @@ -105,12 +106,12 @@ int main() CanHandler handler; can_proxy.addHandler(&handler); - canbus_init_t init = canbus_init_t{CAN1, - miosix::Mode::ALTERNATE, - 9, - {CAN1_RX0_IRQn, CAN1_RX1_IRQn}}; + // FIXME: TimerUtils returns wrong prescaler for CAN, beware!!! + CanConfig config = { + CAN1, CanTimings::forTqBaud(12, 50000), {CAN1_RX0_IRQn, CAN1_RX1_IRQn} + }; - can_proxy.setupBus<GPIOA_BASE, 11, 12>(init, 0); + can_proxy.setupBus(config, 0); printf("CANBUS successfully initialized!\n"); while (true) @@ -122,6 +123,20 @@ int main() EV_SEND_HEARTBEAT, CanProxy::getTs(), NULL, 0); break; + + case 2: + // TODO(events): Actual events + can_proxy.sendEvent(CanProxy::Topic::STRAIN_BOARD, + 69, + CanProxy::getTs(), NULL, 0); + break; + + case 3: + // TODO(events): Actual events + can_proxy.sendEvent(CanProxy::Topic::STRAIN_BOARD, + 42, + CanProxy::getTs(), NULL, 0); + break; } } diff --git a/src/tests/test-canproxy.cpp b/src/tests/test-canproxy.cpp index 7ab7d598be6161376d22beb3e734151d1abc9790..d57b24963c0cdfc33225a64038d09a74fed9d9db 100644 --- a/src/tests/test-canproxy.cpp +++ b/src/tests/test-canproxy.cpp @@ -25,6 +25,8 @@ using namespace miosix; +extern int invoked = 0; + // Uncomment this line to compile for the other side (aka the "slave") // #define IS_SLAVE @@ -47,29 +49,41 @@ int main() { } }; + TRACE("self: %d\n", self); + TRACE("other: %d\n", other); + + TRACE("ABP1: %d\n", TimerUtils::getPrescalerInputFrequency(TimerUtils::InputClock::APB1)); CanHandler handler; TRACE("Setting up canbus...\n"); - canbus_init_t st = { - CAN1, Mode::ALTERNATE, 9, {CAN1_RX0_IRQn, CAN1_RX1_IRQn} +#ifdef _ARCH_CORTEXM3_STM32 + CanConfig st = { + CAN1, CanTimings::forTqBaud(12, 50000), {USB_LP_CAN1_RX0_IRQn, CAN1_RX1_IRQn} + }; +#else + CanConfig st = { + CAN1, CanTimings::forTqBaud(12, 100000), {CAN1_RX0_IRQn, CAN1_RX1_IRQn} }; +#endif CanManager mgr(CAN1); CanProxy can(&mgr, self); - can.setupBus<GPIOA_BASE, 11, 12>(st, 0); + can.setupBus(st, 0); can.addHandler(&handler); TRACE("Setup finished...\n"); while(1) { + int bits = 0b01010101010101010101010101010101; + TRACE("Sending data...\n"); can.sendEvent( other, 10, CanProxy::getTs(), - NULL, - 0 + (void*)&bits, + 4 ); Thread::sleep(1000);