Skip to content

Commit c9311f0

Browse files
committed
Issue #23 : Make SdkWrapper member functions and SDK API Stub conditional.
Wrap each "modules" by if __has_include <xxx/yyy.h>. So, SdkWrapper will have only essential API member function.
1 parent b682be4 commit c9311f0

4 files changed

Lines changed: 68 additions & 7 deletions

File tree

src/sdk/pico_sdk_headers.h

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,26 @@
66
*
77
* Not intended to be read from the application program.
88
*/
9-
#include <../../hardware_i2c/include/hardware/i2c.h>
10-
#include <../../hardware_pio/include/hardware/pio.h>
11-
#include <../../hardware_gpio/include/hardware/gpio.h>
12-
#include <../../hardware_clocks/include/hardware/clocks.h>
13-
#include <../../pico_time/include/pico/time.h>
14-
#include <../../pico_stdio/include/pico/stdio.h>
9+
#if __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
10+
#include <hardware/i2c.h>
11+
#endif // __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
12+
13+
#if __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
14+
#include <hardware/pio.h>
15+
#endif // __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
16+
17+
#if __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
18+
#include <hardware/gpio.h>
19+
#endif // __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
20+
21+
#if __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
22+
#include <hardware/clocks.h>
23+
#endif // __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
24+
25+
#if __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
26+
#include <pico/time.h>
27+
#endif // __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
28+
29+
#if __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)
30+
#include <pico/stdio.h>
31+
#endif // __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)

src/sdk/scripts/generate_body.sh

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,23 @@ grep -v 'stdio_getchar' | grep -v 'stdio_putchar' | grep -v 'stdio_puts' |grep -
6262
cat "$TEMPLIST" >> debug.hpp
6363

6464
# Gnerate include headers.
65-
echo "#include <../../${MODULE_PREFIX}_${MODULE_NAME}/include/${MODULE_PREFIX}/${MODULE_NAME}.h>" >> output/pico_sdk_headers.h
65+
echo "#if __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/pico_sdk_headers.h
66+
echo "#include <${MODULE_PREFIX}/${MODULE_NAME}.h>" >> output/pico_sdk_headers.h
67+
echo "#endif // __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/pico_sdk_headers.h
68+
echo "" >> output/pico_sdk_headers.h
6669

6770
# Generate the class delcaration.
6871
# add "virtual" and ";" to be a right function prototype.
72+
echo "#if __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/sdkwrapper.hpp
6973
sed -e 's/^/virtual /' < "$TEMPLIST" | sed -e 's/$/;/' | sed -e 's/enum_/enum /g' | sed -e 's/const_/const /g' | sed -e 's/void_/void /g' >> output/sdkwrapper.hpp
74+
echo "#endif // __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/sdkwrapper.hpp
75+
echo "" >> output/sdkwrapper.hpp
7076

7177
# Generate the class implementation
78+
echo "#if __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/sdkwrapper.cpp
7279
awk -f awk/gen_impl.awk < "$TEMPLIST" | sed -e 's/enum_/enum /g' | sed -e 's/const_/const /g' | sed -e 's/void_/void /g' >> output/sdkwrapper.cpp
80+
echo "#endif // __has_include(<${MODULE_PREFIX}/${MODULE_NAME}.h>) || __has_include(<gmock/gmock.h>)" >> output/sdkwrapper.cpp
81+
echo "" >> output/sdkwrapper.cpp
7382

7483
# Generate the API stub
7584
awk -v module="$MODULE" -f awk/gen_apistub.awk < "$TEMPLIST" | sed -e 's/enum_/enum /g' | sed -e 's/const_/const /g' | sed -e 's/void_/void /g' >> output/pico_sdk_apistub.cpp

src/sdk/sdkwrapper.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
#include "sdkwrapper.hpp"
3+
#if __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
34
// --------------------------------------------------
45
extern "C" void i2c_deinit(i2c_inst_t* i2c);
56
void rpp_driver::SdkWrapper::i2c_deinit(i2c_inst_t* i2c) { ::i2c_deinit(i2c); }
@@ -151,6 +152,9 @@ int rpp_driver::SdkWrapper::i2c_write_timeout_us(i2c_inst_t* i2c, uint8_t addr,
151152
bool nostop, uint timeout_us) {
152153
return ::i2c_write_timeout_us(i2c, addr, src, len, nostop, timeout_us);
153154
}
155+
#endif // __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
156+
157+
#if __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
154158
// --------------------------------------------------
155159
extern "C" int pio_add_program(PIO pio, const pio_program_t* program);
156160
int rpp_driver::SdkWrapper::pio_add_program(PIO pio,
@@ -761,6 +765,9 @@ void rpp_driver::SdkWrapper::sm_config_set_wrap(pio_sm_config* c,
761765
uint wrap_target, uint wrap) {
762766
::sm_config_set_wrap(c, wrap_target, wrap);
763767
}
768+
#endif // __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
769+
770+
#if __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
764771
// --------------------------------------------------
765772
extern "C" void gpio_acknowledge_irq(uint gpio, uint32_t event_mask);
766773
void rpp_driver::SdkWrapper::gpio_acknowledge_irq(uint gpio,
@@ -1149,6 +1156,9 @@ extern "C" void gpio_xor_mask_n(uint n, uint32_t mask);
11491156
void rpp_driver::SdkWrapper::gpio_xor_mask_n(uint n, uint32_t mask) {
11501157
::gpio_xor_mask_n(n, mask);
11511158
}
1159+
#endif // __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
1160+
1161+
#if __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
11521162
// --------------------------------------------------
11531163
extern "C" bool check_sys_clock_hz(uint32_t freq_hz, uint* vco_freq_out,
11541164
uint* post_div1_out, uint* post_div2_out);
@@ -1274,6 +1284,9 @@ void rpp_driver::SdkWrapper::set_sys_clock_pll(uint32_t vco_freq,
12741284
uint post_div1, uint post_div2) {
12751285
::set_sys_clock_pll(vco_freq, post_div1, post_div2);
12761286
}
1287+
#endif // __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
1288+
1289+
#if __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
12771290
// --------------------------------------------------
12781291
extern "C" int64_t absolute_time_diff_us(absolute_time_t from,
12791292
absolute_time_t to);
@@ -1583,6 +1596,9 @@ extern "C" uint32_t us_to_ms(uint64_t us);
15831596
uint32_t rpp_driver::SdkWrapper::us_to_ms(uint64_t us) {
15841597
return ::us_to_ms(us);
15851598
}
1599+
#endif // __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
1600+
1601+
#if __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)
15861602
// --------------------------------------------------
15871603
extern "C" int getchar_timeout_us(uint32_t timeout_us);
15881604
int rpp_driver::SdkWrapper::getchar_timeout_us(uint32_t timeout_us) {
@@ -1637,3 +1653,4 @@ void rpp_driver::SdkWrapper::stdio_set_translate_crlf(stdio_driver_t* driver,
16371653
bool translate) {
16381654
::stdio_set_translate_crlf(driver, translate);
16391655
}
1656+
#endif // __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)

src/sdk/sdkwrapper.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ TEST_F(UserCodeTest, foo) {
7474
class SdkWrapper {
7575
public:
7676
virtual ~SdkWrapper() {}
77+
78+
#if __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
7779
virtual void i2c_deinit(i2c_inst_t* i2c);
7880
virtual uint i2c_get_dreq(i2c_inst_t* i2c, bool is_tx);
7981
virtual i2c_hw_t* i2c_get_hw(i2c_inst_t* i2c);
@@ -112,6 +114,9 @@ class SdkWrapper {
112114
virtual int i2c_write_timeout_us(i2c_inst_t* i2c, uint8_t addr,
113115
const uint8_t* src, size_t len, bool nostop,
114116
uint timeout_us);
117+
#endif // __has_include(<hardware/i2c.h>) || __has_include(<gmock/gmock.h>)
118+
119+
#if __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
115120
virtual int pio_add_program(PIO pio, const pio_program_t* program);
116121
virtual int pio_add_program_at_offset(PIO pio, const pio_program_t* program,
117122
uint offset);
@@ -255,6 +260,9 @@ class SdkWrapper {
255260
virtual void sm_config_set_sideset_pins(pio_sm_config* c, uint sideset_base);
256261
virtual void sm_config_set_wrap(pio_sm_config* c, uint wrap_target,
257262
uint wrap);
263+
#endif // __has_include(<hardware/pio.h>) || __has_include(<gmock/gmock.h>)
264+
265+
#if __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
258266
virtual void gpio_acknowledge_irq(uint gpio, uint32_t event_mask);
259267
virtual void gpio_add_raw_irq_handler(uint gpio, irq_handler_t handler);
260268
virtual void gpio_add_raw_irq_handler_masked(uint32_t gpio_mask,
@@ -340,6 +348,9 @@ class SdkWrapper {
340348
virtual void gpio_xor_mask(uint32_t mask);
341349
virtual void gpio_xor_mask64(uint64_t mask);
342350
virtual void gpio_xor_mask_n(uint n, uint32_t mask);
351+
#endif // __has_include(<hardware/gpio.h>) || __has_include(<gmock/gmock.h>)
352+
353+
#if __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
343354
virtual bool check_sys_clock_hz(uint32_t freq_hz, uint* vco_freq_out,
344355
uint* post_div1_out, uint* post_div2_out);
345356
virtual bool check_sys_clock_khz(uint32_t freq_khz, uint* vco_freq_out,
@@ -368,6 +379,9 @@ class SdkWrapper {
368379
virtual bool set_sys_clock_khz(uint32_t freq_khz, bool required);
369380
virtual void set_sys_clock_pll(uint32_t vco_freq, uint post_div1,
370381
uint post_div2);
382+
#endif // __has_include(<hardware/clocks.h>) || __has_include(<gmock/gmock.h>)
383+
384+
#if __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
371385
virtual int64_t absolute_time_diff_us(absolute_time_t from,
372386
absolute_time_t to);
373387
virtual absolute_time_t absolute_time_min(absolute_time_t a,
@@ -447,6 +461,9 @@ class SdkWrapper {
447461
virtual void sleep_us(uint64_t us);
448462
virtual uint32_t to_ms_since_boot(absolute_time_t t);
449463
virtual uint32_t us_to_ms(uint64_t us);
464+
#endif // __has_include(<pico/time.h>) || __has_include(<gmock/gmock.h>)
465+
466+
#if __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)
450467
virtual int getchar_timeout_us(uint32_t timeout_us);
451468
virtual int putchar_raw(int c);
452469
virtual int puts_raw(const char* s);
@@ -459,6 +476,7 @@ class SdkWrapper {
459476
bool cr_translation);
460477
virtual void stdio_set_driver_enabled(stdio_driver_t* driver, bool enabled);
461478
virtual void stdio_set_translate_crlf(stdio_driver_t* driver, bool translate);
479+
#endif // __has_include(<pico/stdio.h>) || __has_include(<gmock/gmock.h>)
462480

463481
}; // class SdkWrapper
464482

0 commit comments

Comments
 (0)