initial import
This commit is contained in:
		
						commit
						a6bfe5ce81
					
				|  | @ -0,0 +1,6 @@ | |||
| syntax: glob | ||||
| stage2/.pio | ||||
| stage2/.clang_complete | ||||
| stage2/.gcc-flags.json | ||||
| stage2/.ccls | ||||
| .*.sw? | ||||
|  | @ -0,0 +1,63 @@ | |||
| # pocket computer M4 | ||||
| 
 | ||||
| The PCM4 (pocket computer / M4) is a handheld computing device based | ||||
| around the Keyboard FeatherWing [1] and the Adafruit Feather M4 [2]. | ||||
| The Feather M4 has 512K of flash memory, 192K of RAM, and 2M QSPI [3] | ||||
| flash. | ||||
| 
 | ||||
| [1] https://www.tindie.com/products/arturo182/keyboard-featherwing-qwerty-keyboard-26-lcd/ | ||||
| [2] https://learn.adafruit.com/adafruit-feather-m4-express-atsamd51?view=all | ||||
| [3] https://github.com/adafruit/Adafruit_QSPI | ||||
| 
 | ||||
| It will have a scheme-based operating system. | ||||
| 
 | ||||
| ## Feather M4 pinouts | ||||
| 
 | ||||
| + A0: reserved | ||||
| + A1: reserved | ||||
| + A2: reserved for RFM9X CS | ||||
| + A3: reserved for RFM9X RST | ||||
| + A4: reserved for airlift ESPBUSY | ||||
| + A5: reserved for airlift ESPRESET | ||||
| + D4: reserved for RFM9X IRQ | ||||
| + D5: SD card CS | ||||
| + D6: STMPE CS | ||||
| + D9: LCD CS | ||||
| + D10: LCD DC | ||||
| + D11: neopixel | ||||
| 
 | ||||
| ## Peripherals | ||||
| 
 | ||||
| + Display: 320x240 touchscreen | ||||
|   + ILI9341 LCD controller | ||||
|   + STMPE610 touchscreen | ||||
| + Keyboard: BB Q10 keyboard + 4x tactile buttons + 5-way switch | ||||
|   + I2C address: 0x1F | ||||
| + Planned: DS3231 RTC | ||||
|   + I2C address: 0x66 | ||||
| + Planned: RFM95 LoRa featherwing | ||||
| + Planned: ESP32 airlift | ||||
| + Planned: ATECC608A cryptoprocessor | ||||
| 
 | ||||
| ## Boot sequence | ||||
| 
 | ||||
| 1. Stage 1: UF2 bootloader [4][5] | ||||
| 2. Stage 2: base hardware environment | ||||
|    + hardware init | ||||
|    + I2C/SPI interface | ||||
|    + SD card | ||||
|    + RTC core | ||||
|    + scheme core | ||||
| 3. Load boot.scm from SD card. | ||||
| 
 | ||||
| Stretch goal: | ||||
| + Holding down the center button in the joystick should bring up a menu | ||||
|   of scheme files on the SD card, allowing the user to select the boot | ||||
|   code. | ||||
| 
 | ||||
| Note that each stage is as minimal as possible, so stage 2 should | ||||
| contain just enough to load the operating system from boot.scm, | ||||
| which should contain the actual operating system. | ||||
| 
 | ||||
| [4] https://learn.adafruit.com/adafruit-feather-m0-express-designed-for-circuit-python-circuitpython/uf2-bootloader-details | ||||
| [5] https://github.com/Microsoft/uf2 | ||||
|  | @ -0,0 +1,39 @@ | |||
| 
 | ||||
| This directory is intended for project header files. | ||||
| 
 | ||||
| A header file is a file containing C declarations and macro definitions | ||||
| to be shared between several project source files. You request the use of a | ||||
| header file in your project source file (C, C++, etc) located in `src` folder | ||||
| by including it, with the C preprocessing directive `#include'. | ||||
| 
 | ||||
| ```src/main.c | ||||
| 
 | ||||
| #include "header.h" | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|  ... | ||||
| } | ||||
| ``` | ||||
| 
 | ||||
| Including a header file produces the same results as copying the header file | ||||
| into each source file that needs it. Such copying would be time-consuming | ||||
| and error-prone. With a header file, the related declarations appear | ||||
| in only one place. If they need to be changed, they can be changed in one | ||||
| place, and programs that include the header file will automatically use the | ||||
| new version when next recompiled. The header file eliminates the labor of | ||||
| finding and changing all the copies as well as the risk that a failure to | ||||
| find one copy will result in inconsistencies within a program. | ||||
| 
 | ||||
| In C, the usual convention is to give header files names that end with `.h'. | ||||
| It is most portable to use only letters, digits, dashes, and underscores in | ||||
| header file names, and at most one dot. | ||||
| 
 | ||||
| Read more about using header files in official GCC documentation: | ||||
| 
 | ||||
| * Include Syntax | ||||
| * Include Operation | ||||
| * Once-Only Headers | ||||
| * Computed Includes | ||||
| 
 | ||||
| https://gcc.gnu.org/onlinedocs/cpp/Header-Files.html | ||||
|  | @ -0,0 +1,46 @@ | |||
| 
 | ||||
| This directory is intended for project specific (private) libraries. | ||||
| PlatformIO will compile them to static libraries and link into executable file. | ||||
| 
 | ||||
| The source code of each library should be placed in a an own separate directory | ||||
| ("lib/your_library_name/[here are source files]"). | ||||
| 
 | ||||
| For example, see a structure of the following two libraries `Foo` and `Bar`: | ||||
| 
 | ||||
| |--lib | ||||
| |  | | ||||
| |  |--Bar | ||||
| |  |  |--docs | ||||
| |  |  |--examples | ||||
| |  |  |--src | ||||
| |  |     |- Bar.c | ||||
| |  |     |- Bar.h | ||||
| |  |  |- library.json (optional, custom build options, etc) https://docs.platformio.org/page/librarymanager/config.html | ||||
| |  | | ||||
| |  |--Foo | ||||
| |  |  |- Foo.c | ||||
| |  |  |- Foo.h | ||||
| |  | | ||||
| |  |- README --> THIS FILE | ||||
| | | ||||
| |- platformio.ini | ||||
| |--src | ||||
|    |- main.c | ||||
| 
 | ||||
| and a contents of `src/main.c`: | ||||
| ``` | ||||
| #include <Foo.h> | ||||
| #include <Bar.h> | ||||
| 
 | ||||
| int main (void) | ||||
| { | ||||
|   ... | ||||
| } | ||||
| 
 | ||||
| ``` | ||||
| 
 | ||||
| PlatformIO Library Dependency Finder will find automatically dependent | ||||
| libraries scanning project source files. | ||||
| 
 | ||||
| More information about PlatformIO Library Dependency Finder | ||||
| - https://docs.platformio.org/page/librarymanager/ldf.html | ||||
|  | @ -0,0 +1,26 @@ | |||
| ; PlatformIO Project Configuration File | ||||
| ; | ||||
| ;   Build options: build flags, source filter | ||||
| ;   Upload options: custom upload port, speed and extra flags | ||||
| ;   Library options: dependencies, extra library storages | ||||
| ;   Advanced options: extra scripting | ||||
| ; | ||||
| ; Please visit documentation for the other options and examples | ||||
| ; https://docs.platformio.org/page/projectconf.html | ||||
| 
 | ||||
| [env:adafruit_feather_m4] | ||||
| platform = atmelsam | ||||
| board = adafruit_feather_m4 | ||||
| framework = arduino | ||||
| 
 | ||||
| ; 28: Adafruit NeoPixel library | ||||
| ; 83: Adafruit RTClib | ||||
| ; 571: Adafruit ILI9341 library | ||||
| lib_deps = | ||||
|   - Wire | ||||
|   - SPI | ||||
|   - SD | ||||
|   - 28 | ||||
|   - 83 | ||||
|   - 571 | ||||
|   - arturo182/BBQ10Keyboard | ||||
|  | @ -0,0 +1,28 @@ | |||
| #include <Adafruit_NeoPixel.h> | ||||
| 
 | ||||
| 
 | ||||
| Adafruit_NeoPixel pixels(1, 11, NEO_GRB + NEO_KHZ800); | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| init() | ||||
| { | ||||
| 	Serial.begin(115200); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| main() | ||||
| { | ||||
| 	static bool	on = false; | ||||
| 	Serial.println("blink"); | ||||
| 
 | ||||
| 	if (on) { | ||||
| 		pixels.clear(); | ||||
| 	} else { | ||||
| 		pixels.setPixelColor(0, pixels.color(0, 255, 0)); | ||||
| 	} | ||||
| 	pixels.show(); | ||||
| 
 | ||||
| 	delay(1000); | ||||
| } | ||||
|  | @ -0,0 +1,11 @@ | |||
| 
 | ||||
| This directory is intended for PlatformIO Unit Testing and project tests. | ||||
| 
 | ||||
| Unit Testing is a software testing method by which individual units of | ||||
| source code, sets of one or more MCU program modules together with associated | ||||
| control data, usage procedures, and operating procedures, are tested to | ||||
| determine whether they are fit for use. Unit testing finds problems early | ||||
| in the development cycle. | ||||
| 
 | ||||
| More information about PlatformIO Unit Testing: | ||||
| - https://docs.platformio.org/page/plus/unit-testing.html | ||||
		Loading…
	
		Reference in New Issue