# ePenguin Software Framework

Warning: This only works for x86\_64 linux machines atm. Windows development is in progress. I have no idea how to go about testing for mac so... yeah.

As of right now, only the *new* command works. Everything else is not implemented yet. However, *new* does most of the heavy lifting so the other commands will come quickly once it is finished and polished.

### Instructions for testing
```
cd ~
git clone https://git.epenguin.net/ePenguin/ePenguin-Software-Framework.git
git clone https://git.epenguin.net/ePenguin/ePenguin-Igloo.git
sudo chmod -R u+x ~/ePenguin-Software-Framework/
sudo chmod -R u+x ~/ePenguin-Igloo/
export ESF_DIR=~/ePenguin-Software-Framework
alias igloo=~/ePenguin-Igloo/target/release/igloo
igloo
```
You should see a help menu thrown at you for more instruction.

### Generating a new project
```
igloo new <project_name> --target=<mcu>
# Example
igloo new testproject --target=samd21j18a
```

### Instructions for building
The framework comes with compilers so no external dependencies are needed. There are unfortunately no libraries yet because I want to nail igloo, the project manager, with certainty first.

```
cd <project_name>/.igloo/target/
make
```

### Instructions for running
I'm not including these steps because openocd releases vary with target configs. I recommend you download a release from https://openocd.org and unzip it there. Downloading via a package manager almost guarantees you're going to be missing target scripts.

In the future, igloo will handle all of this.

for the e54 xplained
```
openocd -f board/atmel_same54_xplained_pro.cfg
```

for the d21 xplained
```
openocd -f board/atmel_samd21_xplained_pro.cfg
```

If the E54 xplained cfg isn't found for some reason, try this:
```
echo "
#
# Atmel SAMD21 Xplained Pro evaluation kit.
#

source [find interface/cmsis-dap.cfg]
transport select swd
# chip name
set CHIPNAME same54p20a
source [find target/atsame5x.cfg]
" > same54.cfg

openocd -f same54.cfg
```

Now in another terminal:
```
cd <project_dir>/target/same54p20a/
make
${ESF_DIR}/toolchains/arm/bin/arm-none-eabi-gdb -iex "target extended-remote localhost:3333" testdir.elf
load
monitor reset
```

If you're using gdb with python extensions then use this instead
```
${ESF_DIR}/toolchains/arm/bin/arm-none-eabi-gdb-py -iex "target extended-remote localhost:3333" testdir.elf
```

### Supported Targets

The framework allows me to add support for mcus pretty rapidly. I can add entire families of mcus with a few lines in the manifests. For now I've added support for mcus I use, but I'll be adding support for every Microchip SAM mcu shortly, as well as SiFive MCUs and STM32 MCUs.
### Status Guide
| Icon               | Description         |
| ---                | ---                 |
| :exclamation:      | In Development      |
| :grey_question:    | Unstable            |
| :question:         | Experimental        |
| :white_check_mark: | Stable              |

#### Arm

| MCU         | Status |
| :---        | ---:   |
| samd21e15a  | ---    |
| samd21e16a  | ---    |
| samd21e17a  | ---    |
| samd21e18a  | ---    |
| samd21g15a  | ---    |
| samd21g16a  | ---    |
| samd21g17a  | ---    |
| samd21g17au | ---    |
| samd21g18a  | ---    |
| samd21g18au | ---    |
| samd21j15a  | ---    |
| samd21j16a  | ---    |
| samd21j17a  | ---    |
| samd21j18a  | ---    |
