All Projects → otsaregorodtsev → Walkgeek

otsaregorodtsev / Walkgeek

Licence: bsd-3-clause
ARM Cortex-M4 MP3 and Opus audio player

Programming Languages

c
50402 projects - #5 most used programming language

Labels

Projects that are alternatives of or similar to Walkgeek

Piku
The tiniest PaaS you've ever seen. Piku allows you to do git push deployments to your own servers.
Stars: ✭ 902 (+1904.44%)
Mutual labels:  arm
Reverse Engineering
This repository contains some of the executables that I've cracked.
Stars: ✭ 29 (-35.56%)
Mutual labels:  arm
Desmume
DeSmuME is a Nintendo DS emulator
Stars: ✭ 989 (+2097.78%)
Mutual labels:  arm
Stm32liquidcrystal
Liquid Crystal Library for STM32
Stars: ✭ 24 (-46.67%)
Mutual labels:  arm
Ferret
Ferret is a free software lisp implementation for real time embedded control systems.
Stars: ✭ 878 (+1851.11%)
Mutual labels:  arm
Freertos Cell
FreeRTOS for Jailhouse Cells
Stars: ✭ 31 (-31.11%)
Mutual labels:  arm
Azure Openshift
RedHat Openshift Origin cluster on Azure
Stars: ✭ 17 (-62.22%)
Mutual labels:  arm
Simde
Implementations of SIMD instruction sets for systems which don't natively support them.
Stars: ✭ 1,012 (+2148.89%)
Mutual labels:  arm
Reko
Reko is a binary decompiler.
Stars: ✭ 942 (+1993.33%)
Mutual labels:  arm
Ws Ldn 4
Interactive DIY Synth / ARM baremetal workshop (London, 23-24 January 2016)
Stars: ✭ 36 (-20%)
Mutual labels:  arm
Ck Wa
Collective Knowledge workflow for ARM's workload automation tool: an open framework for gathering and sharing knowledge about system design and optimization using real-world workloads.
Stars: ✭ 24 (-46.67%)
Mutual labels:  arm
Cloudguardiaas
Check Point CloudGuard Network Security repository containing solution templates, Terraform templates, tools and scripts for deploying and configuring CloudGuard Network Security products.
Stars: ✭ 27 (-40%)
Mutual labels:  arm
Pi Builder
Extensible tool to build Arch Linux ARM for Raspberry Pi on x86_64 host using Docker
Stars: ✭ 31 (-31.11%)
Mutual labels:  arm
Element Web
element.io docker image generator
Stars: ✭ 21 (-53.33%)
Mutual labels:  arm
Iotz
compile things easy 🚀
Stars: ✭ 39 (-13.33%)
Mutual labels:  arm
Woa Deployer Rpi
WOA Deployer for Raspberry Pi
Stars: ✭ 898 (+1895.56%)
Mutual labels:  arm
Python27 Arm Xcompile
Build script and patches for cross-compiling Python 2.7.3 to target ARM
Stars: ✭ 30 (-33.33%)
Mutual labels:  arm
Tinygo
Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
Stars: ✭ 9,068 (+20051.11%)
Mutual labels:  arm
Rt0s
Minimal Realtime OS for Cortex-M0
Stars: ✭ 41 (-8.89%)
Mutual labels:  arm
Prettyos
A Preemptive Hard Real Time kernel for embedded devices.
Stars: ✭ 36 (-20%)
Mutual labels:  arm

= About walkgeek ===============================================================

This is walkgeek, another portable music player based upon STM32F4-Discovery board hardware, which contains STM32F407VGT6 microcontroller and CS43L22 audio codec. For now, it can play MP3 and Opus files.

The goal of this project is to create a fully functional yet very simple portable player, optimized for easy navigation across a lot of pretty long audio files (podcasts).

= Hardware =====================================================================

There are 2 pretty similar HW platforms supported (or rather variations of a one platform) called N1100 and F4DISCOVERY.

--- F4DISCOVERY ----------------------------------------------------------------

This platform is represented by STM32F4-Discovery board. It gives you an easy way to try out and develop walkgeek. No HW modifications are necessary in a very basic case. You only need to put some audio files supported by walkgeek on a USB Flash drive and attach in to the USB Micro connector (CN5). User interface is limited to a on-board "User" button which acts as button "3", and 4 leds:

  • Red means no Flash drive connected;
  • Green means Flash drive has enumerated and Player is started;
  • Orange means Player is stopped or loading current track;
  • Blue (blinking) means Player is playing current track.

--- N1100 ----------------------------------------------------------------------

There is also a more portable HW version that fits into Nokia 1100 cell phone case. Design resources for it are also available in a pcb/ directory of this project in EAGLE CAD format.

= Software =====================================================================

  1. Checkout the latest version of the source code by following the instructions here: http://code.google.com/p/walkgeek/source/checkout

  2. In order to build the source code, you need:

  • Git
  • CMake of a version of 2.8.4 or higher.
  • ARM GNU Toolchain: CodeSourcery, Linaro, etc.
  1. You probably will find useful to have openocd as a gdb server which supports many cheap JTAG probes, including STLink v2 which is found in all the Discovery boards by ST.

= Example steps for Linux-based desktop ========================================

  1. Checkout latest version of player's source code.

$ git clone

  1. It seems that CMake doesn't like embedded arm gnu toolchains (which is the case for at least CodeSourcery and Linaro on Ubuntu GNU/Linux) and shows errors at the project configure stage. You may solve them by typing:

$ cd walkgeek $ sudo ./patch_cmake.sh

Dollar sign stands for command line prompt, do not type it. Please note that on OS other than GNU/Linux it may be different file or even may be unnecessary. Probably there is more proper way but this one has worked for me.

  1. You should be at this moment in walkgeek directory. Type:

$ mkdir Build $ cd Build

  1. Next step is to invoke cmake in order to generate Makefiles. You can specify a list of parameters where syntax for each item is -D%param_name%=%param_value%. Among other standard cmake parameters, you can specify:

    • TOOLCHAIN_PREFIX -- full path to the root directory of your toolchain. Default is $ENV{HOME}/Local/gcc-arm-none-eabi-4_6-2012q2

    • TARGET_TRIPLET -- prefic for toolchain programs, default is arm-none-eabi.

    • STM32_USBLib_DIR -- full path to the STM32 USB Host Device Lib. Default is ${CMAKE_SOURCE_DIR}/bsp/3rd_party/STM32_USB-Host-Device_Lib_V2.1.0

    • CMAKE_BUILD_TYPE -- Release or Debug or others (please refer to the CMake documentation). Default is Debug.

    • PLATFORM -- choose one of the supported HW platforms: N1100, F4DISCOVERY, SIMULATOR (see below). Default is N1100.

    • PROFILING -- enable measurement of the CPU consumption of the audio codecs. 1 enables, 0 disables. Default is 0.

    • ENABLE_TRACE -- enable trace() functions output via USB CDC. Default is 0.

    • USE_MP3 -- enable MP3 support. Default is 0.

    • RPROG_OHM -- if your platform is N1100, this is the value of resistor which sets LTC4054 charge current. Default is 2000.

    • SD_CARD_FILE -- if your platform is SIMULATOR, enter a full path to the file which contains FAT file system. See below for details. No default here.

    So if your toolchain and paths are the same, you don't need to specify all of them. In this example the default values are passed explicitly.

$ cmake -DTOOLCHAIN_PREFIX=/home/oleg/Local/CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_EABI
-DUSE_MP3=1 ../ -G"Unix Makefiles"

$ make

Now you can build .hex, .bin or .dis (disassembly) files

$ make walkgeek.hex

My Ubuntu even auto-completes Makefile targets.

  1. (Optional) You can also debug it. Open one console, cd to the walkgeek's source root dir and

$ openocd -f openocd_luminary.cfg

Switch to another console, cd to the walkgeek's source root dir and

$ arm-none-eabi-gdb --quiet --tui -x debug.gdb

= SIMULATOR ====================================================================

There's a way to launch walkgeek on your PC (currently only POSIX OS'es are supported, at least GNU/Linux). PCM Audio output is not yet implemented. But console IO works and keyboard is simulated via stdin (just press a key and hit enter). If you press a number of keys and press enter, each of them will be handled consequently. Also, SD card IO simulation works, so that FAT FS module of walkgeek sees no difference compared to real HW. The idea is to manually create a file of some MB of a size, create FAT FS inside it (just like if it were an SD card), mount it, put some audio or whatever files in it and feed it to walkgeek application.

  1. To do it, first create a file (this example will create a bs*count=128 MB file)

$ dd if=/dev/zero of=sd_card.bin bs=1024 count=131072

  1. Make FAT FS here

$ /sbin/mkdosfs -F 16 sd_card.bin

  1. Mount it

$ mkdir fatmount $ sudo mount -t vfat -o umask=0000 -o loop sd_card.bin fatmount

  1. Put some files into fatmount/ dir.

  2. Unmount it in order to drain write buffers.

$ sudo umount fatmount

  1. When launching CMake (see above), choose -DPLATFORM=SIMULATOR -D%path-to%/sd_card.bin

This is a good way to debug higher-level algorithms (for example, Navigator module was tested that way).

Thank you for your attention.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].