Skip to content

Commit 25bccb0

Browse files
authored
Merge pull request #171 from picoruby/sqlite3
Sqlite3
2 parents d0bef2d + aa0409b commit 25bccb0

File tree

6 files changed

+102
-71
lines changed

6 files changed

+102
-71
lines changed

CMakeLists.txt

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,20 @@ cmake_minimum_required(VERSION 3.24)
44
# note: this must happen before project()
55
include(pico_sdk_import.cmake)
66

7+
#####################################################
8+
# project specific configuration from here
9+
710
add_definitions(
8-
-DNDEBUG
911
-DMRBC_USE_HAL_RP2040
1012
-DMRBC_REQUIRE_32BIT_ALIGNMENT
1113
-DMAX_REGS_SIZE=256
1214
-DMAX_VM_COUNT=255
13-
-DMAX_SYMBOLS_COUNT=2000
15+
-DMAX_SYMBOLS_COUNT=1800
1416
-DMRBC_CONVERT_CRLF
1517
-DMRBC_USE_MATH
1618
-DPICORBC_PTR_SIZE=4
1719
-DNO_CLOCK_GETTIME=1
1820
)
19-
if(PICORUBY_NO_MSC)
20-
add_definitions(-DPICORUBY_NO_MSC)
21-
else()
22-
add_definitions(-DPICORUBY_MSC_FLASH)
23-
endif()
24-
25-
#####################################################
26-
# project specific configuration from here
2721

2822
execute_process (COMMAND date +%Y%m%d OUTPUT_VARIABLE CMAKE_BUILDDATE OUTPUT_STRIP_TRAILING_WHITESPACE)
2923
execute_process (COMMAND git rev-parse --short HEAD OUTPUT_VARIABLE CMAKE_REVISION OUTPUT_STRIP_TRAILING_WHITESPACE)
@@ -33,19 +27,32 @@ set (PRK_BUILDDATE ${CMAKE_BUILDDATE})
3327
set (PRK_REVISION ${CMAKE_REVISION})
3428
configure_file ("${CMAKE_SOURCE_DIR}/include/version.h.in" "${CMAKE_SOURCE_DIR}/include/version.h")
3529

36-
if(PICORUBY_NO_MSC)
37-
project("prk_firmware-${PRK_VERSION}-${PRK_BUILDDATE}-no_msc")
30+
if(DEFINED ENV{PICORUBY_NO_MSC})
31+
set (MSC_NAME NO_MSC)
32+
add_definitions(-DPICORUBY_NO_MSC)
33+
elseif(DEFINED ENV{PICORUBY_MSC_SD})
34+
set (MSC_NAME MSC_SD)
35+
add_definitions(-DPICORUBY_MSC_SD)
3836
else()
39-
project("prk_firmware-${PRK_VERSION}-${PRK_BUILDDATE}-${PRK_REVISION}")
37+
set (MSC_NAME MSC_FLASH)
38+
add_definitions(-DPICORUBY_MSC_FLASH)
4039
endif()
4140

41+
if(DEFINED ENV{PICORUBY_SQLITE3})
42+
set (MSC_NAME ${MSC_NAME}-SQLITE3)
43+
add_definitions(-DPICORUBY_SQLITE3)
44+
endif()
45+
46+
project("prk_firmware-${MSC_NAME}-${PRK_VERSION}-${PRK_BUILDDATE}-${PRK_REVISION}")
47+
4248
# Initializing the Raspberry Pi Pico SDK should happen after project created
4349
pico_sdk_init()
4450

4551
file(GLOB SRCS src/*.c)
4652
add_executable(${PROJECT_NAME}
4753
${SRCS}
4854
${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-filesystem-fat/ports/rp2040/flash_disk.c
55+
${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-filesystem-fat/ports/rp2040/sd_disk.c
4956
${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-filesystem-fat/ports/rp2040/msc_disk.c
5057
${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-gpio/ports/rp2040/gpio.c
5158
${CMAKE_SOURCE_DIR}/lib/picoruby/mrbgems/picoruby-i2c/ports/rp2040/i2c.c
@@ -63,7 +70,10 @@ set(RBC ${CMAKE_CURRENT_SOURCE_DIR}/lib/picoruby/bin/picorbc)
6370

6471
# Ruby
6572

66-
if(PICORUBY_NO_MSC)
73+
if(DEFINED ENV{PICORUBY_NO_MSC})
74+
add_dependencies(${PROJECT_NAME}
75+
keymap
76+
)
6777
add_custom_target(keymap
6878
COMMAND ${RBC} -Bkeymap -o ./keymap.c ../keymap.rb
6979
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}
@@ -100,12 +110,6 @@ add_dependencies(${PROJECT_NAME}
100110
${RUBY_TASK_FILES}
101111
)
102112

103-
if(PICORUBY_NO_MSC)
104-
add_dependencies(${PROJECT_NAME}
105-
keymap
106-
)
107-
endif()
108-
109113
target_include_directories(${PROJECT_NAME} PRIVATE
110114
${CMAKE_SOURCE_DIR}/tinyusb
111115
${CMAKE_SOURCE_DIR}/lib/picoruby/include/hal_no_impl

Rakefile

Lines changed: 39 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
require "fileutils"
22

3-
MRUBY_CONFIG = "prk_firmware-cortex-m0plus"
3+
ENV['MRUBY_CONFIG'] = "prk_firmware-cortex-m0plus"
44
PICO_SDK_TAG = "1.5.0"
55

6-
task :default => :all
6+
task :default => :production
77

88
task :setup do
99
sh "bundle install"
@@ -13,40 +13,54 @@ task :setup do
1313
end
1414
end
1515

16-
desc "build production"
17-
task :all => [:libmruby, :test, :cmake_production, :build]
16+
task :all => [:libmruby, :test, :cmake, :build]
17+
1818

1919
desc "build debug (you may need to rake clean before this)"
20-
task :debug => [:libmruby, :test, :cmake_debug, :build]
20+
task :debug do
21+
ENV['PICORUBY_DEBUG'] = '1'
22+
ENV['-DCMAKE_BUILD_TYPE'] = 'Debug'
23+
Rake::Task[:all].invoke
24+
end
2125

22-
file "lib/picoruby" do
23-
sh "git submodule update --init --recursive"
26+
desc "build production"
27+
task :production do
28+
Rake::Task[:all].invoke
2429
end
2530

26-
task :libmruby_no_msc => "lib/picoruby" do
27-
FileUtils.cd "lib/picoruby" do
28-
sh "rake test"
29-
sh "CFLAGS='-DPICORUBY_NO_MSC=1' MRUBY_CONFIG=#{MRUBY_CONFIG} rake"
31+
desc "build PRK Firmware inclusive of keymap.rb (without mass storage)"
32+
task :build_with_keymap, ['keyboard_name'] do |_t, args|
33+
unless args.keyboard_name
34+
raise "Argument `keyboard_name` missing.\nUsage: rake build_with_keymap[prk_meishi2]"
3035
end
36+
dir = "keyboards/#{args.keyboard_name}"
37+
FileUtils.mkdir_p "#{dir}/build"
38+
ENV['PICORUBY_NO_MSC'] = '1'
39+
ENV['PRK_BUILD_DIR'] = "#{dir}/"
40+
Rake::Task[:all].invoke
3141
end
3242

33-
task :libmruby => "lib/picoruby" do
34-
FileUtils.cd "lib/picoruby" do
35-
sh "rake test"
36-
sh "MRUBY_CONFIG=#{MRUBY_CONFIG} rake"
37-
end
43+
desc "build production with SQLite3 and SD card"
44+
task :sqlite3 do
45+
ENV['PICORUBY_SQLITE3'] = '1'
46+
ENV['PICORUBY_SD_CARD'] = '1'
47+
ENV['PICORUBY_MSC_SD'] = '1'
48+
Rake::Task[:all].invoke
3849
end
3950

40-
def mruby_config
41-
"MRUBY_CONFIG=#{MRUBY_CONFIG}"
51+
file "lib/picoruby" do
52+
sh "git submodule update --init --recursive"
4253
end
4354

44-
task :cmake_debug do
45-
sh "#{mruby_config} cmake -DCMAKE_BUILD_TYPE=Debug -B build"
55+
task :libmruby => "lib/picoruby" do
56+
FileUtils.cd "lib/picoruby" do
57+
sh "rake test"
58+
sh "rake"
59+
end
4660
end
4761

48-
task :cmake_production do
49-
sh "#{mruby_config} cmake -B build"
62+
task :cmake do
63+
sh "cmake -B #{ENV['PRK_BUILD_DIR']}build"
5064
end
5165

5266
task :check_pico_sdk => :check_pico_sdk_path do
@@ -71,19 +85,7 @@ end
7185

7286
desc "build without cmake preparation"
7387
task :build => :check_pico_sdk do
74-
sh "cmake --build build"
75-
end
76-
77-
desc "build PRK Firmware inclusive of keymap.rb (without mass storage)"
78-
task :build_with_keymap, ['keyboard_name'] => [:libmruby_no_msc, :test] do |_t, args|
79-
unless args.keyboard_name
80-
raise "Argument `keyboard_name` missing.\nUsage: rake build_with_keymap[prk_meishi2]"
81-
end
82-
dir = "keyboards/#{args.keyboard_name}"
83-
FileUtils.mkdir_p "#{dir}/build"
84-
#sh "cmake -DPICORUBY_NO_MSC=1 -DCMAKE_BUILD_TYPE=Debug -B #{dir}/build"
85-
sh "#{mruby_config} cmake -DPICORUBY_NO_MSC=1 -B #{dir}/build"
86-
sh "cmake --build #{dir}/build"
88+
sh "cmake --build #{ENV['PRK_BUILD_DIR']}build"
8789
end
8890

8991
desc "clean built that includes keymap"
@@ -119,7 +121,7 @@ end
119121
desc "clean built"
120122
task :clean do
121123
FileUtils.cd "lib/picoruby" do
122-
sh "MRUBY_CONFIG=#{MRUBY_CONFIG} rake clean"
124+
sh "rake clean"
123125
end
124126
FileUtils.cd "build" do
125127
FileUtils.rm_rf Dir.glob("prk_firmware-*.*")
@@ -134,7 +136,7 @@ end
134136
desc "deep clean built"
135137
task :deep_clean do
136138
FileUtils.cd "lib/picoruby" do
137-
sh "MRUBY_CONFIG=#{MRUBY_CONFIG} rake deep_clean"
139+
sh "rake deep_clean"
138140
end
139141
FileUtils.cd "build" do
140142
FileUtils.rm_rf Dir.glob("*")

mrblib/usb_task.rb

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
if PICORUBY_MSC == "MSC_SD"
2+
require "spi"
3+
end
14
require "keyboard"
25

36
ENV = {}
@@ -11,9 +14,19 @@
1114

1215
Keyboard.mount_volume
1316

17+
keymap_updated_at = -1
18+
1419
while true
1520
USB.tud_task
1621
if Keyboard.autoreload_ready?
17-
Keyboard.restart
22+
if File.exist?("/keymap.rb")
23+
unixtime = File::Stat.new("/keymap.rb").mtime.to_i
24+
if unixtime != keymap_updated_at
25+
Keyboard.restart
26+
keymap_updated_at = unixtime
27+
else
28+
Keyboard.autoreload_off
29+
end
30+
end
1831
end
1932
end

src/main.c

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,11 @@
3131
#include <keymap.c>
3232
#endif
3333

34-
35-
#define MEMORY_SIZE (1024*200)
34+
#if defined(PICORUBY_SQLITE3)
35+
#define MEMORY_SIZE (1024*203)
36+
#else
37+
#define MEMORY_SIZE (1024*207)
38+
#endif
3639

3740
static uint8_t memory_pool[MEMORY_SIZE];
3841

@@ -54,21 +57,26 @@ tud_msc_write10_complete_cb(uint8_t lun)
5457
autoreload_state = AUTORELOAD_READY;
5558
}
5659

57-
#endif /* PICORUBY_NO_MSC */
60+
#endif /* !PICORUBY_NO_MSC */
5861

5962
static void
6063
prk_init_picoruby(void)
6164
{
65+
mrbc_vm *vm = mrbc_vm_open(NULL);
6266
/* CONST */
6367
mrbc_sym sym_id = mrbc_str_to_symid("SIZEOF_POINTER");
6468
mrbc_set_const(sym_id, &mrbc_integer_value(PICORBC_PTR_SIZE));
65-
sym_id = mrbc_str_to_symid("PICORUBY_NO_MSC");
66-
#ifdef PICORUBY_NO_MSC
67-
mrbc_set_const(sym_id, &mrbc_true_value());
68-
#else
69-
mrbc_set_const(sym_id, &mrbc_false_value());
69+
sym_id = mrbc_str_to_symid("PICORUBY_MSC");
70+
mrbc_value picoruby_msc = mrbc_string_new_cstr(vm,
71+
#if defined(PICORUBY_NO_MSC)
72+
"NO_MSC"
73+
#elif defined(PICORUBY_MSC_FLASH)
74+
"MSC_FLASH"
75+
#elif defined(PICORUBY_MSC_SD)
76+
"MSC_SD"
7077
#endif
71-
mrbc_vm *vm = mrbc_vm_open(NULL);
78+
);
79+
mrbc_set_const(sym_id, &picoruby_msc);
7280
sym_id = mrbc_str_to_symid("PRK_DESCRIPTION");
7381
mrbc_value prk_desc = mrbc_string_new_cstr(vm, PRK_DESCRIPTION);
7482
mrbc_set_const(sym_id, &prk_desc);

tinyusb/tusb_config.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,13 @@
103103
// HID buffer size Should be sufficient to hold ID (if any) + Data
104104
#define CFG_TUD_HID_EP_BUFSIZE 64
105105

106-
// It is normaly 512, but we use 4096 to avoid cache coherency problem
107-
// on writing flash
108-
#define CFG_TUD_MSC_EP_BUFSIZE 4096
106+
#if defined(PICORUBY_MSC_FLASH)
107+
#define CFG_TUD_MSC_EP_BUFSIZE 4096
108+
#elif defined(PICORUBY_MSC_SD)
109+
#define CFG_TUD_MSC_EP_BUFSIZE 512
110+
#else
111+
#error PICORUBY_MSC_devicename must be defined
112+
#endif
109113

110114
// CDC FIFO size of TX and RX
111115
#define CFG_TUD_CDC_RX_BUFSIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)

0 commit comments

Comments
 (0)