11 Commits

Author SHA1 Message Date
Alexander Couzens
87f8de15b4 fix newline \n\r with \r\n 2022-01-24 11:44:35 +01:00
Alexander Couzens
7674b08519 reduce debugging output on the serial 2022-01-24 10:58:51 +01:00
James Tavares
ea9a91f5ce gitignore: add missing entries binaries
Add missing entries for simtrace2-tool, crctool, and host/tests

Change-Id: I23f4b387f220146bccf7d723cc773a72d8e17a65
2022-01-11 17:09:38 +00:00
James Tavares
91a93bc5de firmware: add definition for main osc bypass when using external osc
Add new board.h definition BOARD_MAINOSC_BYPASS to configure the clock module to use an external oscillator rather than a crystal. The qmod board is one such board.
Change-Id: If62f55cd4c8b0cf758534f09d25a9bcb028814a7
2022-01-11 13:10:34 +00:00
James Tavares
aeaf12853e simtrace2-tool: add "modem sim-card (insert|remove)" command
Add a new command to request that the simtrace2 firmware manipulate the
card detect signal, causing the downstream cellular modem to believe
that the SIM card has been inserted or removed, respectfully.

Change-Id: I8c79eb29379a789d9d0d21495e30d66ddbdfb022
2022-01-10 18:06:45 -05:00
Eric Wild
7fde63b7c6 wireshark lua dissector: dissect more
Change-Id: If81812b6330205a65c1c9b7d4240094b71f3c757
2021-12-15 14:10:19 +00:00
Eric Wild
cb655f9774 firmware: add crc stub to all dfu apps to ensure reliable loading
DFU flashing of apps sometimes aborts, and although rare this leads to
broken devices if no boot button or serial/jtag access exists, because
the bootloader will keep trying to start a half-flashed app that then
crashes at some point.

The easiest fix that works with existing bootloaders is to prepend a
small 512 byte stub that calculcates the crc and compares it with the
crc calculated at build time, and then either starts the actual app, or
sets the dfu flag and resets. This ensures we either have a working,
running app, or end up in the bootloader, ready to flash again.

For obvious reasons this only applies to dfu apps, and not to flash
targets like the actual bootloader itself.

Change-Id: Id6df0486c8b779889d21800dc2441b3aa9af8a5f
2021-12-15 14:04:20 +00:00
Oliver Smith
f721e69bc1 treewide: remove FSF address
Remove the paragraph about writing to the Free Software Foundation's
mailing address. The FSF has changed addresses in the past, and may do
so again. In 2021 this is not useful, let's rather have a bit less
boilerplate at the start of source files.

Change-Id: Ie0a3b2273383adbb3303faffd6ff96be7f4cae99
2021-12-14 11:47:21 +01:00
Oliver Smith
8dada9b454 host/contrib/simtrace2.spec.in: update
Apply various improvements from Martin Hauke, thanks!

* Put sover into a variable
* Sync BuildRequires with configure.ac
* Update libosmo-simtrace2 summary
* Use %make_build instead of make %{?_smp_mflags}

Change-Id: I35ce3865702f72365b38b0eaa8b28f332dabcd1f
2021-12-10 14:50:18 +01:00
Oliver Smith
afd23660b3 Bump version: 0.8.0.1-8281 → 0.8.1
Change-Id: I6bcc798db9f4ab2b91711daebeba98abebd55e92
2021-12-10 10:04:28 +01:00
Oliver Smith
24a9ee8ae6 host/contrib/simtrace2.spec.in: fix soname
Adjust the soname in the rpm recipe too, to fix:
  error: File not found: /home/abuild/rpmbuild/BUILDROOT/simtrace2-0.8.0.202112100026-1.1.x86_64/usr/lib64/libosmo-simtrace2.so.0*

Change-Id: I748f44409ac736abbd5c18e31ae02d025dee2c77
2021-12-10 10:04:13 +01:00
124 changed files with 778 additions and 807 deletions

3
.gitignore vendored
View File

@@ -20,6 +20,9 @@ tags
host/simtrace2-list
host/simtrace2-cardem-pcsc
host/contrib/simtrace2.spec
host/src/simtrace2-tool
host/tests
usb_strings_generated.h
firmware/usbstring/usbstring
firmware/apps/*/usb_strings.txt.patched
firmware/misc/crctool

View File

@@ -1,4 +1,4 @@
#!/bin/sh -e
#!/bin/bash -e
# Create copies of binaries with -latest, -$GIT_VERSION (OS#4413, OS#3452)
cd "$(dirname "$0")/.."
@@ -9,8 +9,10 @@ echo "Copying binaries with "-latest" and "-$GIT_VERSION" appended..."
cd firmware/bin
for ext in bin elf; do
for file in *."$ext"; do
without_ext="${file%.*}"
cp -v "$file" "$without_ext-latest.$ext"
cp -v "$file" "$without_ext-$GIT_VERSION.$ext"
if ! [[ "$file" =~ ^(.*padded.*|.*nocrcstub.*)$ ]];then
without_ext="${file%.*}"
cp -v "$file" "$without_ext-latest.$ext"
cp -v "$file" "$without_ext-$GIT_VERSION.$ext"
fi
done
done

View File

@@ -42,14 +42,38 @@ local final = ProtoField.uint32("usb_simtrace.final", "final", base.HEX_DEC, NU
local tpdu_hdr = ProtoField.uint32("usb_simtrace.tpdu_hdr", "tpdu_hdr", base.HEX_DEC, NULL, 0x1)
local rxtxdatalen = ProtoField.uint16("usb_simtrace.rxtxdatalen", "rx/tx data length", base.HEX_DEC)
local rxtxdata = ProtoField.bytes("usb_simtrace.rxtxdata", "rx/tx (data)")
usb_simtrace_protocol.fields = {
msgtype, seqnr, slotnr, reserved, payloadlen, payload, pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata
local CEMU_STATUS_F_VCC_PRESENT = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_VCC_PRESENT", "VCC_PRESENT", base.HEX_DEC, NULL, 0x00000001)
local CEMU_STATUS_F_CLK_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CLK_ACTIVE", "CLK_ACTIVE", base.HEX_DEC, NULL, 0x00000002)
local CEMU_STATUS_F_RCEMU_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RCEMU_ACTIVE", "CEMU_ACTIVE", base.HEX_DEC, NULL, 0x00000004)
local CEMU_STATUS_F_CARD_INSERT = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_CARD_INSERT", "CARD_INSERT", base.HEX_DEC, NULL, 0x00000008)
local CEMU_STATUS_F_RESET_ACTIVE = ProtoField.uint32("usb_simtrace.CEMU_STATUS.F_RESET_ACTIVE", "RESET_ACTIVE", base.HEX_DEC, NULL, 0x00000010)
local modem_reset_types = {
[0x00] = "de-assert",
[0x01] = "assert",
[0x02] = "pulse"
}
local modem_reset_status = ProtoField.uint8("usb_simtrace.modem.reset_type", "modem reset type", base.HEX, modem_reset_types, 0xf)
local modem_reset_len = ProtoField.uint8("usb_simtrace.modem.reset_len", "modem reset length (ms)", base.DEC)
usb_simtrace_protocol.fields = {
msgtype, seqnr, slotnr, reserved, payloadlen, payload,
pb_and_rx, pb_and_tx, final, tpdu_hdr, rxtxdatalen, rxtxdata,
CEMU_STATUS_F_VCC_PRESENT, CEMU_STATUS_F_CLK_ACTIVE, CEMU_STATUS_F_RCEMU_ACTIVE, CEMU_STATUS_F_CARD_INSERT, CEMU_STATUS_F_RESET_ACTIVE,
modem_reset_status, modem_reset_len
}
local is_hdr = Field.new("usb_simtrace.tpdu_hdr")
local is_pbrx = Field.new("usb_simtrace.pb_and_rx")
local is_pbtx = Field.new("usb_simtrace.pb_and_tx")
local is_final= Field.new("usb_simtrace.final")
function dissect_rxtx(payload_data,pinfo,tree)
local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data")
local len = payload_data(8+4,2):le_uint();
local cmd32 = payload_data(8+0,4):le_uint();
local len = payload_data(4,2):le_uint();
local cmd32 = payload_data(0,4):le_uint();
headerSubtree:add(pb_and_rx, cmd32)
headerSubtree:add(pb_and_tx, cmd32)
@@ -57,7 +81,65 @@ function dissect_rxtx(payload_data,pinfo,tree)
headerSubtree:add(tpdu_hdr, cmd32)
headerSubtree:add(rxtxdatalen, len)
headerSubtree:add_le(rxtxdata, payload_data(8+6,len))
headerSubtree:add_le(rxtxdata, payload_data(6,len))
-- ghetto dissection does not work due to mixed in procedure bytes
--if pinfo.visited == false then
-- Dissector.get("iso7816"):call(payload_data(6):tvb(), pinfo, tree)
-- local offs = 0
-- if (is_pbrx().value == 1 or is_pbtx().value == 1) and is_final().value == 0 then
-- offs = 1
-- else
-- offs = 0
-- end
--
-- if is_hdr().value == 1 then
-- Dissector.get("gsm_sim"):call(concatss:tvb(), pinfo, tree)
-- concatss = payload_data(6):bytes()
-- else
-- concatss = concatss .. payload_data(6+offs):bytes()
-- end
--end
end
function dissect_status(payload_data,pinfo,tree)
local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "status message")
local cmd32 = payload_data(0,4):le_uint();
headerSubtree:add(CEMU_STATUS_F_VCC_PRESENT, cmd32)
headerSubtree:add(CEMU_STATUS_F_CLK_ACTIVE, cmd32)
headerSubtree:add(CEMU_STATUS_F_RCEMU_ACTIVE, cmd32)
headerSubtree:add(CEMU_STATUS_F_CARD_INSERT, cmd32)
headerSubtree:add(CEMU_STATUS_F_RESET_ACTIVE, cmd32)
pinfo.cols.info:append(" VCC:" .. payload_data(0,1):bitfield(7, 1) .. " CLK:" .. payload_data(0,1):bitfield(6, 1) .. " RESET:" .. payload_data(0,1):bitfield(3, 1))
end
function dissect_atr(payload_data,pinfo,tree)
local len = payload_data(0,1):le_uint()
Dissector.get("iso7816.atr"):call(payload_data(1):tvb(), pinfo, tree)
end
function dissect_modem_reset(payload_data,pinfo,tree)
local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "modem reset")
local cmd8 = payload_data(0,1):le_uint();
headerSubtree:add(modem_reset_status, cmd8)
pinfo.cols.info:append(" reset type:" .. modem_reset_types[cmd8]);
if(cmd8 == 2) then
local duration = payload_data(1,2):le_uint()
headerSubtree:add(modem_reset_len, duration)
pinfo.cols.info:append(" duration:" .. duration .. "ms")
end
end
function usb_simtrace_protocol.dissector(buffer, pinfo, tree)
@@ -76,7 +158,13 @@ function usb_simtrace_protocol.dissector(buffer, pinfo, tree)
pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command])
local payload_data = buffer(8,length-8)
if(command == 0x0101 or command == 0x0106) then
return dissect_rxtx(buffer(),pinfo,subtree)
return dissect_rxtx(payload_data(),pinfo,subtree)
elseif(command == 0x0104) then
return dissect_status(payload_data(),pinfo,subtree)
elseif(command == 0x0102) then
return dissect_atr(payload_data(),pinfo,subtree)
elseif(command == 0x0201) then
return dissect_modem_reset(payload_data(),pinfo,subtree)
else
subtree:add(payload, payload_data)
end
@@ -89,4 +177,6 @@ local usb_product_dissectors = DissectorTable.get("usb.product")
usb_product_dissectors:add(0x1d50616d, usb_simtrace_protocol)
usb_product_dissectors:add(0x1d50616e, usb_simtrace_protocol)
DissectorTable.get("usb.bulk"):add(0xffff, usb_simtrace_protocol)
DissectorTable.get("usb.interrupt"):add(0xffff, usb_simtrace_protocol)
--concatss = ByteArray.new()
end

6
debian/changelog vendored
View File

@@ -1,3 +1,9 @@
simtrace2 (0.8.1) unstable; urgency=medium
* host/contrib/simtrace2.spec.in: fix soname
-- Oliver Smith <osmith@sysmocom.de> Fri, 10 Dec 2021 10:04:28 +0100
simtrace2 (0.8.0) unstable; urgency=medium
[ Harald Welte ]

View File

@@ -117,7 +117,7 @@ C_LIBUSB = USBDescriptors.c USBRequests.c USBD.c USBDCallbacks.c USBDDriver.
C_LIBUSB_RT = dfu.c dfu_runtime.c
C_LIBUSB_DFU = dfu.c dfu_desc.c dfu_driver.c
C_LIBCOMMON = string.c stdio.c fputs.c usb_buf.c ringbuffer.c pseudo_talloc.c host_communication.c \
main_common.c stack_check.c
main_common.c stack_check.c crcstub.c
C_BOARD = $(notdir $(wildcard libboard/common/source/*.c))
C_BOARD += $(notdir $(wildcard libboard/$(BOARD)/source/*.c))
@@ -229,12 +229,15 @@ $(BIN)/$(BOARD)-dfu-flash-padded.bin: $(BIN)/$(BOARD)-dfu-flash.bin
$(OUTPUT)-combined.bin: $(BIN)/$(BOARD)-dfu-flash-padded.bin $(OUTPUT)-dfu.bin
cat $^ > $@
$(BIN) $(OBJ): apps/$(APP)/usb_strings_generated.h
$(BIN) $(OBJ): apps/$(APP)/usb_strings_generated.h misc/crctool
mkdir -p $@
usbstring/usbstring: usbstring/usbstring.c
gcc $^ -o $@
misc/crctool: misc/crctool.c
gcc $^ -o $@
.PHONY: apps/$(APP)/usb_strings.txt.patched
apps/$(APP)/usb_strings.txt.patched: apps/$(APP)/usb_strings.txt
sed "s/PRODUCT_STRING/$(shell cat libboard/$(BOARD)/product_string.txt)/" $< > $@
@@ -251,7 +254,6 @@ build_$(1): $$(ASM_OBJECTS_$(1)) $$(C_OBJECTS_$(1)) $$(EXTRA_OBJECTS_$(1))
$(SILENT)$(CC) $(CFLAGS) $(LDFLAGS) $(LD_OPTIONAL) -T"libboard/common/resources/$(CHIP)/$(1).ld" -Wl,-Map,$(OUTPUT)-$(1).map -o $(OUTPUT)-$(1).elf $$^ $(LIBS)
$(SILENT)$(NM) $(OUTPUT)-$(1).elf >$(OUTPUT)-$(1).elf.txt
$(SILENT)$(OBJCOPY) -O binary $(OUTPUT)-$(1).elf $(OUTPUT)-$(1).bin
$(SILENT)$(SIZE) $$^ $(OUTPUT)-$(1).elf
$$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN)
@echo [COMPILING $$<]
@@ -261,26 +263,17 @@ $$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN)
@echo [ASSEMBLING $$@]
$(SILENT)$(CC) $(ASFLAGS) -DENVIRONMENT_$(1) -DENVIRONMENT=\"$(1)\" -c -o $$@ $$<
debug_$(1): $(1)
$(GDB) -x "$(BOARD_LIB)/resources/gcc/$(BOARD)_$(1).gdb" -ex "reset" -readnow -se $(OUTPUT)-$(1).elf
endef
ALL_MEMORIES = dfu flash ram
ALL_MEMORIES = flash ram
$(foreach MEMORY, $(ALL_MEMORIES), $(eval $(call RULES,$(MEMORY))))
# files with those names do exist..
.PHONY: ram
.PHONY: dfu
.PHONY: flash
dfu: $(OUTPUT)-dfu.bin
.PHONY: ram
ram: build_ram
dfu: build_dfu
ifeq ($(APP), blupdate)
$(info updating updater section with padded bootloader file..)
$(SILENT)dd if=/dev/zero bs=16384 count=1 of=$(BIN)/$(BOARD)-dfu-flash-padded.bin
$(SILENT)dd if=$(BIN)/$(BOARD)-dfu-flash.bin conv=notrunc of=$(BIN)/$(BOARD)-dfu-flash-padded.bin
$(SILENT)$(OBJCOPY) --update-section .blupdate=bin/$(BOARD)-dfu-flash-padded.bin bin/$(BOARD)-blupdate-dfu.elf
$(SILENT)$(OBJCOPY) -O binary bin/$(BOARD)-blupdate-dfu.elf bin/$(BOARD)-blupdate-dfu.bin
endif
.PHONY: flash
flash: build_flash
#alternate way of embedding: obj file
#ifeq ($(APP), dfu)
@@ -288,8 +281,37 @@ flash: build_flash
# $(SILENT)$(OBJCOPY) --rename-section .data=.fwupdate -I binary -O elf32-littlearm bin/$(BOARD)-dfu-flash.bin $(OBJ)/flash_fwupdate.o
#endif
program:
openocd -f openocd/openocd.cfg -c "init" -c "halt" -c "flash write_bank 0 ./bin/project-flash.bin 0" -c "reset" -c "shutdown"
C_OBJECTS_dfu = $(addprefix $(OBJ)/dfu_, $(C_OBJECTS))
ASM_OBJECTS_dfu = $(addprefix $(OBJ)/dfu_, $(ASM_OBJECTS))
EXTRA_OBJECTS_dfu = $(addprefix $(OBJ)/dfu_, $(EXTRA_OBJECTS))
$(OUTPUT)-dfu.bin: $(OUTPUT)-dfu_nocrcstub.bin
$(info updating app with crc..)
$(SILENT)cp $< $@.temp
$(SILENT)misc/crctool 512 $@.temp
$(SILENT)mv $@.temp $@
$(OUTPUT)-dfu_nocrcstub.bin: $(OUTPUT)-dfu_nocrcstub.elf
ifeq ($(APP), blupdate)
$(info updating updater section with padded bootloader file..)
$(SILENT)dd status=none if=/dev/zero bs=16384 count=1 of=$(BIN)/$(BOARD)-dfu-flash-padded.bin
$(SILENT)dd status=none if=$(BIN)/$(BOARD)-dfu-flash.bin conv=notrunc of=$(BIN)/$(BOARD)-dfu-flash-padded.bin
$(SILENT)$(OBJCOPY) --update-section .blupdate=bin/$(BOARD)-dfu-flash-padded.bin $<
endif
$(SILENT)$(OBJCOPY) -O binary $< $@
$(OUTPUT)-dfu_nocrcstub.elf: $(ASM_OBJECTS_dfu) $(C_OBJECTS_dfu) $(EXTRA_OBJECTS_dfu)
$(SILENT)$(CC) $(CFLAGS) $(LDFLAGS) $(LD_OPTIONAL) -T"libboard/common/resources/$(CHIP)/dfu.ld" -Wl,-Map,$(OUTPUT)-dfu_nocrcstub.map -o $@ $^ $(LIBS)
$(SILENT)$(NM) $@ >$@.txt
$(C_OBJECTS_dfu): $(OBJ)/dfu_%.o: %.c Makefile $(OBJ) $(BIN)
@echo [COMPILING $<]
$(SILENT)$(CC) $(CFLAGS) -DENVIRONMENT_dfu -DENVIRONMENT=\"dfu\" -c -o $@ $<
$(ASM_OBJECTS_dfu): $(OBJ)/dfu_%.o: %.S Makefile $(OBJ) $(BIN)
@echo [ASSEMBLING $@]
$(SILENT)$(CC) $(ASFLAGS) -DENVIRONMENT_dfu -DENVIRONMENT=\"dfu\" -c -o$@ $<
SERIAL ?= /dev/ttyUSB0
log:

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "board.h"
#include "core_cm3.h"
@@ -93,8 +89,14 @@ __attribute__((section(".ramfunc"), noinline, noreturn)) static void erase_first
flash_cmd(EFC_FCMD_EA, 0);
#endif
flash_wait_ready();
for (;;)
NVIC_SystemReset();
for (;;) {
/* no functon call, since NVIC_SystemReset() might not be inlined! */
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk);
__DSB();
while (1)
;
}
}
#define MAX_USB_ITER BOARD_MCK / 72 // This should be around a second
@@ -111,15 +113,15 @@ extern int main(void)
EEFC_ReadUniqueID(g_unique_id);
printf("\n\r\n\r");
printf("bootloader updater %s for board %s\n\r"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\n\r",
printf("\r\n\r\n");
printf("bootloader updater %s for board %s\r\n"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\r\n",
manifest_revision, manifest_board);
/* clear g_dfu on power-up reset */
memset(g_dfu, 0, sizeof(*g_dfu));
TRACE_INFO("USB init...\n\r");
TRACE_INFO("USB init...\r\n");
/* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */
USBD_Disconnect();

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*------------------------------------------------------------------------------
* Headers
@@ -164,7 +160,7 @@ extern int main(void)
print_banner();
board_main_top();
TRACE_INFO("USB init...\n\r");
TRACE_INFO("USB init...\r\n");
SIMtrace_USB_Initialize();
while (USBD_GetState() < USBD_STATE_CONFIGURED) {
@@ -173,7 +169,7 @@ extern int main(void)
#if 0
if (i >= MAX_USB_ITER * 3) {
TRACE_ERROR("Resetting board (USB could "
"not be configured)\n\r");
"not be configured)\r\n");
USBD_Disconnect();
NVIC_SystemReset();
}
@@ -181,19 +177,19 @@ extern int main(void)
i++;
}
TRACE_INFO("calling configure of all configurations...\n\r");
TRACE_INFO("calling configure of all configurations...\r\n");
for (i = 1; i < ARRAY_SIZE(config_func_ptrs); i++) {
if (config_func_ptrs[i].configure)
config_func_ptrs[i].configure();
}
TRACE_INFO("calling init of config %u...\n\r", simtrace_config);
TRACE_INFO("calling init of config %u...\r\n", simtrace_config);
if (config_func_ptrs[simtrace_config].init) {
config_func_ptrs[simtrace_config].init();
}
last_simtrace_config = simtrace_config;
TRACE_INFO("entering main loop...\n\r");
TRACE_INFO("entering main loop...\r\n");
while (1) {
WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -211,12 +207,12 @@ extern int main(void)
isUsbConnected = 0;
}
} else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r");
TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1;
}
if (last_simtrace_config != simtrace_config) {
TRACE_INFO("USB config chg %u -> %u\n\r",
TRACE_INFO("USB config chg %u -> %u\r\n",
last_simtrace_config, simtrace_config);
if (config_func_ptrs[last_simtrace_config].exit) {
config_func_ptrs[last_simtrace_config].exit();

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "board.h"
#include "utils.h"
@@ -82,9 +78,9 @@ int USBDFU_handle_dnload(uint8_t altif, unsigned int offset,
}
#if TRACE_LEVEL >= TRACE_LEVEL_INFO
TRACE_INFO("dnload(altif=%u, offset=%u, len=%u)\n\r", altif, offset, len);
TRACE_INFO("dnload(altif=%u, offset=%u, len=%u)\r\n", altif, offset, len);
#else
printf("DL off=%u\n\r", offset);
printf("DL off=%u\r\n", offset);
#endif
#ifdef PINS_LEDS
@@ -117,19 +113,19 @@ int USBDFU_handle_dnload(uint8_t altif, unsigned int offset,
}
rc = FLASHD_Unlock(addr, addr + len, 0, 0);
if (rc != 0) {
TRACE_ERROR("DFU download flash unlock failed\n\r");
TRACE_ERROR("DFU download flash unlock failed\r\n");
rc = DFU_RET_STALL;
break;
}
rc = FLASHD_Write(addr, data, len);
if (rc != 0) {
TRACE_ERROR("DFU download flash erase failed\n\r");
TRACE_ERROR("DFU download flash erase failed\r\n");
rc = DFU_RET_STALL;
break;
}
for (i = 0; i < len; i++) {
if (((uint8_t*)addr)[i]!=data[i]) {
TRACE_ERROR("DFU download flash data written not correct\n\r");
TRACE_ERROR("DFU download flash data written not correct\r\n");
rc = DFU_RET_STALL;
break;
}
@@ -137,7 +133,7 @@ int USBDFU_handle_dnload(uint8_t altif, unsigned int offset,
rc = DFU_RET_ZLP;
break;
default:
TRACE_ERROR("DFU download for unknown AltIf %d\n\r", altif);
TRACE_ERROR("DFU download for unknown AltIf %d\r\n", altif);
rc = DFU_RET_STALL;
break;
}
@@ -183,11 +179,11 @@ int USBDFU_handle_upload(uint8_t altif, unsigned int offset,
memcpy(data, (void *)addr, req_len);
break;
default:
TRACE_ERROR("DFU upload for unknown AltIf %d\n\r", altif);
TRACE_ERROR("DFU upload for unknown AltIf %d\r\n", altif);
/* FIXME: set error codes */
return -1;
}
printf("=%u\n\r", req_len);
printf("=%u\r\n", req_len);
return req_len;
}
@@ -278,16 +274,16 @@ extern int main(void)
EEFC_ReadUniqueID(g_unique_id);
printf("\n\r\n\r");
printf("\r\n\r\n");
print_line();
printf("DFU bootloader %s for board %s\n\r"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\n\r",
printf("DFU bootloader %s for board %s\r\n"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\r\n",
manifest_revision, manifest_board);
print_line();
#if (TRACE_LEVEL >= TRACE_LEVEL_INFO)
TRACE_INFO("Chip ID: 0x%08lx (Ext 0x%08lx)\n\r", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID);
TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\n\r",
TRACE_INFO("Chip ID: 0x%08lx (Ext 0x%08lx)\r\n", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID);
TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n",
g_unique_id[0], g_unique_id[1],
g_unique_id[2], g_unique_id[3]);
static const char* reset_causes[] = {
@@ -298,9 +294,9 @@ extern int main(void)
"user reset (NRST pin detected low)",
};
if (reset_cause < ARRAY_SIZE(reset_causes)) {
TRACE_INFO("Reset Cause: %s\n\r", reset_causes[reset_cause]);
TRACE_INFO("Reset Cause: %s\r\n", reset_causes[reset_cause]);
} else {
TRACE_INFO("Reset Cause: 0x%lx\n\r", (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos);
TRACE_INFO("Reset Cause: 0x%lx\r\n", (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos);
}
#endif
@@ -310,25 +306,25 @@ extern int main(void)
switch (USBDFU_OverrideEnterDFU()) {
case 0:
if (SCB->VTOR < IFLASH_ADDR + BOARD_DFU_BOOT_SIZE) {
TRACE_INFO_WP("unknown\n\r");
TRACE_INFO_WP("unknown\r\n");
} else {
TRACE_INFO_WP("DFU is the main application\n\r");
TRACE_INFO_WP("DFU is the main application\r\n");
}
break;
case 1:
TRACE_INFO_WP("DFU switch requested by main application\n\r");
TRACE_INFO_WP("DFU switch requested by main application\r\n");
break;
case 2:
TRACE_INFO_WP("bootloader forced (button pressed or jumper set)\n\r");
TRACE_INFO_WP("bootloader forced (button pressed or jumper set)\r\n");
break;
case 3:
TRACE_INFO_WP("stack pointer (first application word) does no point in RAM\n\r");
TRACE_INFO_WP("stack pointer (first application word) does no point in RAM\r\n");
break;
case 4: // the is no reason
TRACE_INFO_WP("reset vector (second application word) does no point in flash\n\r");
TRACE_INFO_WP("reset vector (second application word) does no point in flash\r\n");
break;
default:
TRACE_INFO_WP("unknown\n\r");
TRACE_INFO_WP("unknown\r\n");
break;
}
#endif
@@ -339,7 +335,7 @@ extern int main(void)
board_main_top();
TRACE_INFO("USB init...\n\r");
TRACE_INFO("USB init...\r\n");
/* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */
USBD_Disconnect();
mdelay(500);
@@ -350,7 +346,7 @@ extern int main(void)
check_exec_dbg_cmd();
#if 1
if (i >= MAX_USB_ITER * 3) {
TRACE_ERROR("Resetting board (USB could not be configured)\n\r");
TRACE_ERROR("Resetting board (USB could not be configured)\r\n");
g_dfu->magic = USB_DFU_MAGIC; // start the bootloader after reboot
USBD_Disconnect();
NVIC_SystemReset();
@@ -362,7 +358,7 @@ extern int main(void)
/* Initialize the flash to be able to write it, using the IAP ROM code */
FLASHD_Initialize(BOARD_MCK, 1);
TRACE_INFO("entering main loop...\n\r");
TRACE_INFO("entering main loop...\r\n");
while (1) {
WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -382,7 +378,7 @@ extern int main(void)
isUsbConnected = 0;
}
} else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r");
TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1;
}

View File

@@ -32,17 +32,17 @@ extern int main(void)
PIO_InitializeInterrupts(0);
printf("\n\r\n\r"
"=============================================================================\n\r"
"Freq Ctr firmware " GIT_VERSION " (C) 2019 by Harald Welte\n\r"
"=============================================================================\n\r");
printf("\r\n\r\n"
"=============================================================================\r\n"
"Freq Ctr firmware " GIT_VERSION " (C) 2019 by Harald Welte\r\n"
"=============================================================================\r\n");
board_main_top();
TRACE_INFO("starting frequency counter...\n\r");
TRACE_INFO("starting frequency counter...\r\n");
freq_ctr_init();
TRACE_INFO("entering main loop...\n\r");
TRACE_INFO("entering main loop...\r\n");
while (1) {
WDT_Restart(WDT);

View File

@@ -4,5 +4,5 @@
void gpio_test_init(void)
{
printf("FIXME run tests here\n\r");
printf("FIXME run tests here\r\n");
}

View File

@@ -32,17 +32,17 @@ extern int main(void)
PIO_InitializeInterrupts(0);
printf("\n\r\n\r"
"=============================================================================\n\r"
"GPIO Test firmware " GIT_VERSION " (C) 2019 Sysmocom GmbH\n\r"
"=============================================================================\n\r");
printf("\r\n\r\n"
"=============================================================================\r\n"
"GPIO Test firmware " GIT_VERSION " (C) 2019 Sysmocom GmbH\r\n"
"=============================================================================\r\n");
board_main_top();
TRACE_INFO("starting gpio test...\n\r");
TRACE_INFO("starting gpio test...\r\n");
gpio_test_init();
TRACE_INFO("entering main loop...\n\r");
TRACE_INFO("entering main loop...\r\n");
while (1) {
WDT_Restart(WDT);

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
/*------------------------------------------------------------------------------
* Headers
@@ -160,7 +156,7 @@ extern int main(void)
print_banner();
board_main_top();
TRACE_INFO("USB init...\n\r");
TRACE_INFO("USB init...\r\n");
SIMtrace_USB_Initialize();
while (USBD_GetState() < USBD_STATE_CONFIGURED) {
@@ -169,7 +165,7 @@ extern int main(void)
#if 0
if (i >= MAX_USB_ITER * 3) {
TRACE_ERROR("Resetting board (USB could "
"not be configured)\n\r");
"not be configured)\r\n");
USBD_Disconnect();
NVIC_SystemReset();
}
@@ -177,17 +173,17 @@ extern int main(void)
i++;
}
TRACE_INFO("calling configure of all configurations...\n\r");
TRACE_INFO("calling configure of all configurations...\r\n");
for (i = 1; i < ARRAY_SIZE(config_func_ptrs); i++) {
if (config_func_ptrs[i].configure)
config_func_ptrs[i].configure();
}
TRACE_INFO("calling init of config %u...\n\r", simtrace_config);
TRACE_INFO("calling init of config %u...\r\n", simtrace_config);
config_func_ptrs[simtrace_config].init();
last_simtrace_config = simtrace_config;
TRACE_INFO("entering main loop...\n\r");
TRACE_INFO("entering main loop...\r\n");
while (1) {
WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -205,12 +201,12 @@ extern int main(void)
isUsbConnected = 0;
}
} else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r");
TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1;
}
if (last_simtrace_config != simtrace_config) {
TRACE_INFO("USB config chg %u -> %u\n\r",
TRACE_INFO("USB config chg %u -> %u\r\n",
last_simtrace_config, simtrace_config);
config_func_ptrs[last_simtrace_config].exit();
config_func_ptrs[simtrace_config].init();

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*------------------------------------------------------------------------------
* Headers

View File

@@ -767,7 +767,7 @@ static void UDP_EndpointHandler(uint8_t bEndpoint)
}
else {
// Acknowledge interrupt
TRACE_ERROR("Error Wr%d, %x\n\r", bEndpoint, pEndpoint->state);
TRACE_ERROR("Error Wr%d, %x\r\n", bEndpoint, pEndpoint->state);
CLEAR_CSR(bEndpoint, UDP_CSR_TXCOMP);
}
}
@@ -914,11 +914,11 @@ static inline uint8_t UDP_Write(uint8_t bEndpoint,
/* int i;
for (i = 0; i < dLength; i++) {
if (!(i%16)) {
printf("\n\r");
printf("\r\n");
}
printf("0x%x ", ((uint8_t*)pData)[i]);
}
printf("\n\r");
printf("\r\n");
*/
/* Setup the transfer descriptor */
@@ -1053,11 +1053,11 @@ static inline uint8_t UDP_Read(uint8_t bEndpoint,
/* int i;
for (i = 0; i < dLength; i++) {
if (!(i%16)) {
printf("\n\r");
printf("\r\n");
}
printf("0x%x ", ((uint8_t*)pData)[i]);
}
printf("\n\r");
printf("\r\n");
*/
/* Set the transfer descriptor */
@@ -1114,7 +1114,7 @@ void USBD_IrqHandler(void)
/* Return immediately if there is no interrupt to service */
if (status == 0) {
TRACE_DEBUG_WP(".\n\r");
TRACE_DEBUG_WP(".\r\n");
return;
}
@@ -1212,7 +1212,7 @@ void USBD_IrqHandler(void)
if (status != 0) {
TRACE_DEBUG_WP("\n\r - ");
TRACE_DEBUG_WP("\r\n - ");
}
}
eptnum++;
@@ -1221,7 +1221,7 @@ void USBD_IrqHandler(void)
/* Toggle LED back to its previous state */
TRACE_DEBUG_WP("!");
TRACE_DEBUG_WP("\n\r");
TRACE_DEBUG_WP("\r\n");
if (USBD_GetState() >= USBD_STATE_POWERED) {
//LED_Clear(USBD_LEDUSB);
@@ -1581,7 +1581,7 @@ void USBD_HAL_SetConfiguration(uint8_t cfgnum)
*/
void USBD_HAL_Init(void)
{
TRACE_DEBUG("%s\n\r", "USBD_HAL_Init");
TRACE_DEBUG("%s\r\n", "USBD_HAL_Init");
/* Must before USB & TXVC access! */
UDP_EnablePeripheralClock();
@@ -1610,7 +1610,7 @@ uint8_t USBD_HAL_Stall(uint8_t bEP)
/* Check that endpoint is in Idle state */
if (pEndpoint->state != UDP_ENDPOINT_IDLE) {
TRACE_WARNING("UDP_Stall: EP%d locked\n\r", bEP);
TRACE_WARNING("UDP_Stall: EP%d locked\r\n", bEP);
return USBD_STATUS_LOCKED;
}
/* STALL endpoint */

View File

@@ -163,7 +163,7 @@ extern void EFC_TranslateAddress( Efc** ppEfc, uint32_t dwAddress, uint16_t* pwP
wPage = (dwAddress - IFLASH_ADDR) / IFLASH_PAGE_SIZE;
wOffset = (dwAddress - IFLASH_ADDR) % IFLASH_PAGE_SIZE;
TRACE_DEBUG( "Translated 0x%08lX to page=%d and offset=%d\n\r", dwAddress, wPage, wOffset ) ;
TRACE_DEBUG( "Translated 0x%08lX to page=%d and offset=%d\r\n", dwAddress, wPage, wOffset ) ;
/* Store values */
if ( pEfc )
{

View File

@@ -134,7 +134,7 @@ static void ComputeLockRange( uint32_t dwStart, uint32_t dwEnd, uint32_t *pdwAct
// Store actual page numbers
EFC_ComputeAddress( pStartEfc, wActualStartPage, 0, pdwActualStart ) ;
EFC_ComputeAddress( pEndEfc, wActualEndPage, 0, pdwActualEnd ) ;
TRACE_DEBUG( "Actual lock range is 0x%06lX - 0x%06lX\n\r", *pdwActualStart, *pdwActualEnd ) ;
TRACE_DEBUG( "Actual lock range is 0x%06lX - 0x%06lX\r\n", *pdwActualStart, *pdwActualEnd ) ;
}

View File

@@ -104,7 +104,7 @@ extern void PioInterruptHandler( uint32_t id, Pio *pPio )
/* Check pending events */
if ( status != 0 )
{
TRACE_DEBUG( "PIO interrupt on PIO controller #%" PRIu32 "\n\r", id ) ;
TRACE_DEBUG( "PIO interrupt on PIO controller #%" PRIu32 "\r\n", id ) ;
/* Find triggering source */
i = 0;
@@ -119,7 +119,7 @@ extern void PioInterruptHandler( uint32_t id, Pio *pPio )
/* Source has PIOs whose statuses have changed */
if ( (status & _aIntSources[i].pPin->mask) != 0 )
{
TRACE_DEBUG( "Interrupt source #%" PRIu32 " triggered\n\r", i ) ;
TRACE_DEBUG( "Interrupt source #%" PRIu32 " triggered\r\n", i ) ;
_aIntSources[i].handler(_aIntSources[i].pPin);
status &= ~(_aIntSources[i].pPin->mask);
@@ -177,13 +177,13 @@ extern void PIOC_IrqHandler( void )
*/
extern void PIO_InitializeInterrupts( uint32_t dwPriority )
{
TRACE_DEBUG( "PIO_Initialize()\n\r" ) ;
TRACE_DEBUG( "PIO_Initialize()\r\n" ) ;
/* Reset sources */
_dwNumSources = 0 ;
/* Configure PIO interrupt sources */
TRACE_DEBUG( "PIO_Initialize: Configuring PIOA\n\r" ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOA\r\n" ) ;
PMC_EnablePeripheral( ID_PIOA ) ;
PIOA->PIO_ISR ;
PIOA->PIO_IDR = 0xFFFFFFFF ;
@@ -192,7 +192,7 @@ extern void PIO_InitializeInterrupts( uint32_t dwPriority )
NVIC_SetPriority( PIOA_IRQn, dwPriority ) ;
NVIC_EnableIRQ( PIOA_IRQn ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOB\n\r" ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOB\r\n" ) ;
PMC_EnablePeripheral( ID_PIOB ) ;
PIOB->PIO_ISR ;
PIOB->PIO_IDR = 0xFFFFFFFF ;
@@ -201,7 +201,7 @@ extern void PIO_InitializeInterrupts( uint32_t dwPriority )
NVIC_SetPriority( PIOB_IRQn, dwPriority ) ;
NVIC_EnableIRQ( PIOB_IRQn ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\n\r" ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\r\n" ) ;
PMC_EnablePeripheral( ID_PIOC ) ;
PIOC->PIO_ISR ;
PIOC->PIO_IDR = 0xFFFFFFFF ;
@@ -234,7 +234,7 @@ extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) )
Pio* pio ;
InterruptSource* pSource ;
TRACE_DEBUG( "PIO_ConfigureIt()\n\r" ) ;
TRACE_DEBUG( "PIO_ConfigureIt()\r\n" ) ;
assert( pPin ) ;
pio = pPin->pio ;
@@ -242,7 +242,7 @@ extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) )
pSource = find_intsource4pin(pPin);
if (!pSource) {
/* Define new source */
TRACE_DEBUG( "PIO_ConfigureIt: Defining new source #%" PRIu32 ".\n\r", _dwNumSources ) ;
TRACE_DEBUG( "PIO_ConfigureIt: Defining new source #%" PRIu32 ".\r\n", _dwNumSources ) ;
assert( _dwNumSources < MAX_INTERRUPT_SOURCES ) ;
pSource = &(_aIntSources[_dwNumSources]) ;
pSource->pPin = pPin ;
@@ -288,7 +288,7 @@ extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) )
*/
extern void PIO_EnableIt( const Pin *pPin )
{
TRACE_DEBUG( "PIO_EnableIt()\n\r" ) ;
TRACE_DEBUG( "PIO_EnableIt()\r\n" ) ;
assert( pPin != NULL ) ;
@@ -320,7 +320,7 @@ extern void PIO_DisableIt( const Pin *pPin )
{
assert( pPin != NULL ) ;
TRACE_DEBUG( "PIO_DisableIt()\n\r" ) ;
TRACE_DEBUG( "PIO_DisableIt()\r\n" ) ;
pPin->pio->PIO_IDR = pPin->mask;
}

View File

@@ -63,7 +63,7 @@ extern void PMC_EnablePeripheral( uint32_t dwId )
{
if ( (PMC->PMC_PCSR0 & ((uint32_t)1 << dwId)) == ((uint32_t)1 << dwId) )
{
TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral" " %" PRIu32 " is already enabled\n\r", dwId ) ;
TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral" " %" PRIu32 " is already enabled\r\n", dwId ) ;
}
else
{
@@ -75,7 +75,7 @@ extern void PMC_EnablePeripheral( uint32_t dwId )
dwId -= 32;
if ((PMC->PMC_PCSR1 & ((uint32_t)1 << dwId)) == ((uint32_t)1 << dwId))
{
TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral" " %" PRIu32 " is already enabled\n\r", dwId + 32 ) ;
TRACE_DEBUG( "PMC_EnablePeripheral: clock of peripheral" " %" PRIu32 " is already enabled\r\n", dwId + 32 ) ;
}
else
{
@@ -100,7 +100,7 @@ extern void PMC_DisablePeripheral( uint32_t dwId )
{
if ( (PMC->PMC_PCSR0 & ((uint32_t)1 << dwId)) != ((uint32_t)1 << dwId) )
{
TRACE_DEBUG("PMC_DisablePeripheral: clock of peripheral" " %" PRIu32 " is not enabled\n\r", dwId ) ;
TRACE_DEBUG("PMC_DisablePeripheral: clock of peripheral" " %" PRIu32 " is not enabled\r\n", dwId ) ;
}
else
{
@@ -112,7 +112,7 @@ extern void PMC_DisablePeripheral( uint32_t dwId )
dwId -= 32 ;
if ( (PMC->PMC_PCSR1 & ((uint32_t)1 << dwId)) != ((uint32_t)1 << dwId) )
{
TRACE_DEBUG( "PMC_DisablePeripheral: clock of peripheral" " %" PRIu32 " is not enabled\n\r", dwId + 32 ) ;
TRACE_DEBUG( "PMC_DisablePeripheral: clock of peripheral" " %" PRIu32 " is not enabled\r\n", dwId + 32 ) ;
}
else
{
@@ -132,7 +132,7 @@ extern void PMC_EnableAllPeripherals( void )
PMC->PMC_PCER1 = MASK_STATUS1 ;
while ( (PMC->PMC_PCSR1 & MASK_STATUS1) != MASK_STATUS1 ) ;
TRACE_DEBUG( "Enable all periph clocks\n\r" ) ;
TRACE_DEBUG( "Enable all periph clocks\r\n" ) ;
}
/**
@@ -146,7 +146,7 @@ extern void PMC_DisableAllPeripherals( void )
PMC->PMC_PCDR1 = MASK_STATUS1 ;
while ( (PMC->PMC_PCSR1 & MASK_STATUS1) != 0 ) ;
TRACE_DEBUG( "Disable all periph clocks\n\r" ) ;
TRACE_DEBUG( "Disable all periph clocks\r\n" ) ;
}
/**

View File

@@ -198,7 +198,7 @@ void USART_Write(
if (timeOut == 0) {
TRACE_ERROR("USART_Write: Timed out.\n\r");
TRACE_ERROR("USART_Write: Timed out.\r\n");
return;
}
timeOut--;
@@ -269,7 +269,7 @@ uint16_t USART_Read(
if (timeOut == 0) {
TRACE_ERROR( "USART_Read: Timed out.\n\r" ) ;
TRACE_ERROR( "USART_Read: Timed out.\r\n" ) ;
return 0;
}
timeOut--;

View File

@@ -140,7 +140,7 @@ void USBD_ResetHandler()
void USBD_RequestHandler(uint8_t bEndpoint,
const USBGenericRequest* pRequest)
{
TRACE_DEBUG("%s\n\r", "USBD_RequestHandler");
TRACE_DEBUG("%s\r\n", "USBD_RequestHandler");
if (bEndpoint != 0) {
TRACE_WARNING("EP%d request not supported, default EP only",
bEndpoint);
@@ -316,7 +316,7 @@ void USBD_RemoteWakeUp(void)
/* Device is NOT suspended */
if (deviceState != USBD_STATE_SUSPENDED) {
TRACE_INFO("USBD_RemoteWakeUp: Device is not suspended\n\r");
TRACE_INFO("USBD_RemoteWakeUp: Device is not suspended\r\n");
return;
}
USBD_HAL_Activate();
@@ -356,7 +356,7 @@ void USBD_Disconnect(void)
*/
void USBD_Init(void)
{
TRACE_INFO_WP("USBD_Init\n\r");
TRACE_INFO_WP("USBD_Init\r\n");
/* HW Layer Initialize */
USBD_HAL_Init();
@@ -367,7 +367,7 @@ void USBD_Init(void)
/* Upper Layer Initialize */
USBDCallbacks_Initialized();
TRACE_DEBUG("%s\n\r", "..");
TRACE_DEBUG("%s\r\n", "..");
}
/**

View File

@@ -83,7 +83,7 @@ static void SetConfiguration(USBDDriver *pDriver, uint8_t cfgnum)
const USBConfigurationDescriptor *pConfiguration;
/* Use different descriptor depending on device speed */
TRACE_DEBUG("%s\n\r", "SetConfiguration");
TRACE_DEBUG("%s\r\n", "SetConfiguration");
if (USBD_IsHighSpeed()) {
@@ -361,7 +361,7 @@ static void GetDescriptor(
default:
TRACE_WARNING(
"USBDDriver_GetDescriptor: Unknown descriptor type (%d)\n\r",
"USBDDriver_GetDescriptor: Unknown descriptor type (%d)\r\n",
type);
USBD_Stall(0);
}
@@ -565,7 +565,7 @@ void USBDDriver_RequestHandler(
default:
TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown recipient (%d)\n\r",
"USBDDriver_RequestHandler: Unknown recipient (%d)\r\n",
USBGenericRequest_GetRecipient(pRequest));
USBD_Stall(0);
}
@@ -595,7 +595,7 @@ void USBDDriver_RequestHandler(
default:
TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r",
"USBDDriver_RequestHandler: Unknown feature selector (%d)\r\n",
USBFeatureRequest_GetFeatureSelector(pRequest));
USBD_Stall(0);
}
@@ -642,7 +642,7 @@ void USBDDriver_RequestHandler(
default:
TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r",
"USBDDriver_RequestHandler: Unknown feature selector (%d)\r\n",
USBFeatureRequest_GetFeatureSelector(pRequest));
USBD_Stall(0);
}
@@ -665,7 +665,7 @@ void USBDDriver_RequestHandler(
default:
TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown request code (%d)\n\r",
"USBDDriver_RequestHandler: Unknown request code (%d)\r\n",
USBGenericRequest_GetRequest(pRequest));
USBD_Stall(0);
}

View File

@@ -14,10 +14,6 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <unistd.h>
@@ -53,7 +49,7 @@ struct dfudata *g_dfu = &_g_dfu;
WEAK void dfu_drv_updstatus(void)
{
TRACE_INFO("DFU: updstatus()\n\r");
TRACE_INFO("DFU: updstatus()\r\n");
/* we transition immediately from MANIFEST_SYNC to MANIFEST,
* as the flash-writing is not asynchronous in this
@@ -76,7 +72,7 @@ static __dfufunc void handle_getstatus(void)
dstat.iString = 0;
memcpy(&dstat.bwPollTimeout, poll_timeout_10ms, sizeof(dstat.bwPollTimeout));
TRACE_DEBUG("handle_getstatus(%u, %u)\n\r", dstat.bStatus, dstat.bState);
TRACE_DEBUG("handle_getstatus(%u, %u)\r\n", dstat.bStatus, dstat.bState);
USBD_Write(0, (char *)&dstat, sizeof(dstat), NULL, 0);
}
@@ -85,7 +81,7 @@ static void __dfufunc handle_getstate(void)
{
uint8_t u8 = g_dfu->state;
TRACE_DEBUG("handle_getstate(%ld)\n\r", g_dfu->state);
TRACE_DEBUG("handle_getstate(%ld)\r\n", g_dfu->state);
USBD_Write(0, (char *)&u8, sizeof(u8), NULL, 0);
}
@@ -110,10 +106,10 @@ static void dnload_cb(void *arg, unsigned char status, unsigned long int transfe
{
int rc;
TRACE_DEBUG("COMPLETE\n\r");
TRACE_DEBUG("COMPLETE\r\n");
if (status != USBD_STATUS_SUCCESS) {
TRACE_ERROR("USBD download callback status %d\n\r", status);
TRACE_ERROR("USBD download callback status %d\r\n", status);
USBD_Stall(0);
return;
}
@@ -140,14 +136,14 @@ static int handle_dnload(uint16_t val, uint16_t len, int first)
int rc;
if (len > BOARD_DFU_PAGE_SIZE) {
TRACE_ERROR("DFU length exceeds flash page size\n\r");
TRACE_ERROR("DFU length exceeds flash page size\r\n");
g_dfu->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL;
}
if (len & 0x03) {
TRACE_ERROR("DFU length not four-byte-aligned\n\r");
TRACE_ERROR("DFU length not four-byte-aligned\r\n");
g_dfu->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL;
@@ -157,7 +153,7 @@ static int handle_dnload(uint16_t val, uint16_t len, int first)
g_dfu->total_bytes = 0;
if (len == 0) {
TRACE_DEBUG("zero-size write -> MANIFEST_SYNC\n\r");
TRACE_DEBUG("zero-size write -> MANIFEST_SYNC\r\n");
g_dfu->state = DFU_STATE_dfuMANIFEST_SYNC;
return DFU_RET_ZLP;
}
@@ -176,10 +172,10 @@ static void upload_cb(void *arg, unsigned char status, unsigned long int transfe
{
int rc;
TRACE_DEBUG("COMPLETE\n\r");
TRACE_DEBUG("COMPLETE\r\n");
if (status != USBD_STATUS_SUCCESS) {
TRACE_ERROR("USBD upload callback status %d\n\r", status);
TRACE_ERROR("USBD upload callback status %d\r\n", status);
USBD_Stall(0);
return;
}
@@ -195,7 +191,7 @@ static int handle_upload(uint16_t val, uint16_t len, int first)
g_dfu->total_bytes = 0;
if (len > BOARD_DFU_PAGE_SIZE) {
TRACE_ERROR("DFU length exceeds flash page size\n\r");
TRACE_ERROR("DFU length exceeds flash page size\r\n");
g_dfu->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL;
@@ -203,7 +199,7 @@ static int handle_upload(uint16_t val, uint16_t len, int first)
rc = USBDFU_handle_upload(if_altsettings[0], g_dfu->total_bytes, dfu_buf, len);
if (rc < 0) {
TRACE_ERROR("application handle_upload() returned %d\n\r", rc);
TRACE_ERROR("application handle_upload() returned %d\r\n", rc);
return DFU_RET_STALL;
}
@@ -221,7 +217,7 @@ void USBDFU_DFU_RequestHandler(const USBGenericRequest *request)
uint16_t val = USBGenericRequest_GetValue(request);
int rc, ret = DFU_RET_NOTHING;
TRACE_DEBUG("type=0x%x, recipient=0x%x val=0x%x len=%u\n\r",
TRACE_DEBUG("type=0x%x, recipient=0x%x val=0x%x len=%u\r\n",
USBGenericRequest_GetType(request),
USBGenericRequest_GetRecipient(request),
val, len);

View File

@@ -15,10 +15,6 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#include <board.h>
@@ -59,7 +55,7 @@ static __dfufunc void handle_getstatus(void)
dstat.iString = 0;
memcpy(&dstat.bwPollTimeout, poll_timeout_10ms, sizeof(dstat.bwPollTimeout));
TRACE_DEBUG("handle_getstatus(%u, %u)\n\r", dstat.bStatus, dstat.bState);
TRACE_DEBUG("handle_getstatus(%u, %u)\r\n", dstat.bStatus, dstat.bState);
USBD_Write(0, (char *)&dstat, sizeof(dstat), NULL, 0);
}
@@ -68,7 +64,7 @@ static void __dfufunc handle_getstate(void)
{
uint8_t u8 = g_dfu->state;
TRACE_DEBUG("handle_getstate(%lu)\n\r", g_dfu->state);
TRACE_DEBUG("handle_getstate(%lu)\r\n", g_dfu->state);
USBD_Write(0, (char *)&u8, sizeof(u8), NULL, 0);
}
@@ -114,7 +110,7 @@ void USBDFU_Runtime_RequestHandler(const USBGenericRequest *request)
uint16_t val = USBGenericRequest_GetValue(request);
int rc, ret = DFU_RET_NOTHING;
TRACE_DEBUG("type=0x%x, recipient=0x%x val=0x%x len=%u\n\r",
TRACE_DEBUG("type=0x%x, recipient=0x%x val=0x%x len=%u\r\n",
USBGenericRequest_GetType(request),
USBGenericRequest_GetRecipient(request),
val, len);
@@ -163,7 +159,7 @@ void USBDFU_Runtime_RequestHandler(const USBGenericRequest *request)
/* we switch it DETACH state, send a ZLP and
* return. The next USB reset in this state
* will then trigger DFURT_SwitchToDFU() below */
TRACE_DEBUG("\r\n====dfu_detach\n\r");
TRACE_DEBUG("\r\n====dfu_detach\r\n");
g_dfu->state = DFU_STATE_appDETACH;
USBD_Write(0, 0, 0, 0, 0);
DFURT_SwitchToDFU();

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#ifndef _BOARD_
#define _BOARD_

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#ifndef _MANIFEST_H
#define _MANIFEST_H

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -39,7 +39,8 @@ SEARCH_DIR(.)
MEMORY
{
/* reserve the first 16k (= 0x4000) for the DFU bootloader */
rom (rx) : ORIGIN = 0x00400000 + 16K, LENGTH = 256K - 16K /* flash, 256K */
crcstub (rx) : ORIGIN = 0x00400000 + 16K, LENGTH = 512 /* crcstub part */
rom (rx) : ORIGIN = 0x00400000 + 16K + 512, LENGTH = 256K - 16K - 512 /* flash, 256K */
/* note: dfudata will be at the start */
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 48K /* SRAM, 48K */
}
@@ -47,9 +48,17 @@ MEMORY
/* Section Definitions */
SECTIONS
{
.text :
{
.crcstub :
{
. = ALIGN(4);
KEEP(*(.crcstub_table))
KEEP(*(.crcstub_code))
} > crcstub = 0xff
.text :
{
. = ALIGN(512);
_sfixed = .;
KEEP(*(.vectors .vectors.*))
*(.text .text.* .gnu.linkonce.t.*)
@@ -94,7 +103,7 @@ SECTIONS
. = ALIGN(4);
_efixed = .; /* End of text section */
} > rom
} > rom = 0xff
/DISCARD/ :
{

View File

@@ -97,6 +97,8 @@ SECTIONS
/DISCARD/ :
{
*(.ARM.exidx)
*(.crcstub_table)
*(.crcstub_code)
}
. = ALIGN(4);

View File

@@ -147,7 +147,7 @@ extern WEAK void LowLevelInit( void )
}
*/
#ifndef qmod
#ifndef BOARD_MAINOSC_BYPASS
/* Initialize main oscillator */
if ( !(PMC->CKGR_MOR & CKGR_MOR_MOSCSEL) )
{
@@ -165,11 +165,11 @@ extern WEAK void LowLevelInit( void )
timeout = 0;
while (!(PMC->PMC_SR & PMC_SR_MOSCSELS) && (timeout++ < CLOCK_TIMEOUT));
#else
/* QMOD has external 12MHz clock source */
/* Board has external clock, not a crystal oscillator */
PIOB->PIO_PDR = (1 << 9);
PIOB->PIO_PUDR = (1 << 9);
PIOB->PIO_PPDDR = (1 << 9);
PMC->CKGR_MOR = CKGR_MOR_KEY(0x37) | CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTBY| CKGR_MOR_MOSCSEL;
PMC->CKGR_MOR = CKGR_MOR_KEY(0x37) | CKGR_MOR_MOSCRCEN | CKGR_MOR_MOSCXTBY | CKGR_MOR_MOSCSEL;
#endif
/* disable the red LED after main clock initialization */

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "boardver_adc.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdint.h>
#include <string.h>

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "manifest.h"

View File

@@ -238,7 +238,7 @@ extern void UART_DumpFrame( uint8_t* pucFrame, uint32_t dwSize )
printf( "%02X ", pucFrame[dw] ) ;
}
printf( "\n\r" ) ;
printf( "\r\n" ) ;
}
/**
@@ -273,7 +273,7 @@ extern void UART_DumpMemory( uint8_t* pucBuffer, uint32_t dwSize, uint32_t dwAdd
UART_PutChar( *pucTmp++ ) ;
}
printf( "\n\r" ) ;
printf( "\r\n" ) ;
}
if ( (dwSize%16) != 0 )
@@ -304,7 +304,7 @@ extern void UART_DumpMemory( uint8_t* pucBuffer, uint32_t dwSize, uint32_t dwAdd
UART_PutChar( pucBuffer[j] ) ;
}
printf( "\n\r" ) ;
printf( "\r\n" ) ;
}
}
@@ -335,12 +335,12 @@ extern uint32_t UART_GetInteger( uint32_t* pdwValue )
{
if ( ucNbNb == 0 )
{
printf( "\n\rWrite a number and press ENTER or SPACE!\n\r" ) ;
printf( "\r\nWrite a number and press ENTER or SPACE!\r\n" ) ;
return 0 ;
}
else
{
printf( "\n\r" ) ;
printf( "\r\n" ) ;
*pdwValue=dwValue ;
return 1 ;
@@ -348,7 +348,7 @@ extern uint32_t UART_GetInteger( uint32_t* pdwValue )
}
else
{
printf( "\n\r'%c' not a number!\n\r", ucKey ) ;
printf( "\r\n'%c' not a number!\r\n", ucKey ) ;
return 0 ;
}
@@ -375,12 +375,12 @@ extern uint32_t UART_GetIntegerMinMax( uint32_t* pdwValue, uint32_t dwMin, uint3
if ( dwValue < dwMin || dwValue > dwMax )
{
printf( "\n\rThe number have to be between %d and %d\n\r", (int)dwMin, (int)dwMax ) ;
printf( "\r\nThe number have to be between %d and %d\r\n", (int)dwMin, (int)dwMax ) ;
return 0 ;
}
printf( "\n\r" ) ;
printf( "\r\n" ) ;
*pdwValue = dwValue ;
@@ -421,7 +421,7 @@ extern uint32_t UART_GetHexa32( uint32_t* pdwValue )
}
else
{
printf( "\n\rIt is not a hexa character!\n\r" ) ;
printf( "\r\nIt is not a hexa character!\r\n" ) ;
return 0 ;
}
@@ -429,7 +429,7 @@ extern uint32_t UART_GetHexa32( uint32_t* pdwValue )
}
}
printf("\n\r" ) ;
printf("\r\n" ) ;
*pdwValue = dwValue ;
return 1 ;

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "simtrace.h"
@@ -36,39 +32,39 @@ void board_exec_dbg_cmd(int ch)
{
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\tR\treset SAM3\n\r");
printf("\tl\tswitch off LED 1\n\r");
printf("\tL\tswitch on LED 1\n\r");
printf("\tg\tswitch off LED 2\n\r");
printf("\tG\tswitch on LED 2\n\r");
printf("\t1\tGenerate 1ms reset pulse on WWAN1\n\r");
printf("\t!\tSwitch Channel A from physical -> remote\n\r");
printf("\tt\t(pseudo)talloc report\n\r");
printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\r\n");
printf("\tl\tswitch off LED 1\r\n");
printf("\tL\tswitch on LED 1\r\n");
printf("\tg\tswitch off LED 2\r\n");
printf("\tG\tswitch on LED 2\r\n");
printf("\t1\tGenerate 1ms reset pulse on WWAN1\r\n");
printf("\t!\tSwitch Channel A from physical -> remote\r\n");
printf("\tt\t(pseudo)talloc report\r\n");
break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
case 'l':
led_blink(LED_GREEN, BLINK_ALWAYS_OFF);
printf("LED 1 switched off\n\r");
printf("LED 1 switched off\r\n");
break;
case 'L':
led_blink(LED_GREEN, BLINK_ALWAYS_ON);
printf("LED 1 switched on\n\r");
printf("LED 1 switched on\r\n");
break;
case 'g':
led_blink(LED_RED, BLINK_ALWAYS_OFF);
printf("LED 2 switched off\n\r");
printf("LED 2 switched off\r\n");
break;
case 'G':
led_blink(LED_RED, BLINK_ALWAYS_ON);
printf("LED 2 switched on\n\r");
printf("LED 2 switched on\r\n");
break;
case '1':
printf("Resetting Modem\n\r");
printf("Resetting Modem\r\n");
wwan_perst_do_reset_pulse(0, 300);
break;
case '!':
@@ -78,7 +74,7 @@ void board_exec_dbg_cmd(int ch)
talloc_report(NULL, stdout);
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <osmocom/core/timer.h>
#include "board.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"
@@ -41,7 +37,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init();
}
TRACE_INFO("Modem %d: %s SIM\n\r", nr,
TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual");
switch (nr) {
@@ -50,7 +46,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break;
default:
TRACE_ERROR("Invalid SIM%u\n\r", nr);
TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1;
}

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* Depending on the board this is running on, it might be possible
* for the controller to read the status of the WWAN LED output lines of

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* Depending on the board this is running on, it might be possible
* for the controller to set the status of the PERST input line of

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdbool.h>
#include "board.h"
@@ -34,12 +30,12 @@ void board_exec_dbg_cmd(int ch)
{
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\t0-8\tselect physical SIM slot\n\r");
printf("\tR\treset SAM3\n\r");
printf("\tm\trun mcp23017 test\n\r");
printf("\ti\tset card insert via I2C\n\r");
printf("\tI\tdisable card insert\n\r");
printf("\t?\thelp\r\n");
printf("\t0-8\tselect physical SIM slot\r\n");
printf("\tR\treset SAM3\r\n");
printf("\tm\trun mcp23017 test\r\n");
printf("\ti\tset card insert via I2C\r\n");
printf("\tI\tdisable card insert\r\n");
break;
case '0': mux_set_slot(0); break;
case '1': mux_set_slot(1); break;
@@ -50,7 +46,7 @@ void board_exec_dbg_cmd(int ch)
case '6': mux_set_slot(6); break;
case '7': mux_set_slot(7); break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
@@ -66,7 +62,7 @@ void board_exec_dbg_cmd(int ch)
mcp23017_set_output_a(MCP23017_ADDRESS, 0);
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}
@@ -97,7 +93,7 @@ int board_override_enter_dfu(void)
/* Enter DFU bootloader in case the respective button is pressed */
if (PIO_Get(&bl_sw_pin) == 0) {
/* do not print to early since the console is not initialized yet */
//printf("BOOTLOADER switch pressed -> Force DFU\n\r");
//printf("BOOTLOADER switch pressed -> Force DFU\r\n");
return 1;
} else
return 0;

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include <stdbool.h>

View File

@@ -94,7 +94,7 @@ out_stop:
int mcp23017_init(uint8_t slave, uint8_t iodira, uint8_t iodirb)
{
TRACE_DEBUG("mcp23017_init\n\r");
TRACE_DEBUG("mcp23017_init\r\n");
// all gpio input
if (mcp23017_write_byte(slave, MCP23017_IODIRA, iodira))
@@ -105,23 +105,23 @@ int mcp23017_init(uint8_t slave, uint8_t iodira, uint8_t iodirb)
if (mcp23017_write_byte(slave, MCP23017_IOCONA, 0x20)) //disable SEQOP (autoinc addressing)
goto out_err;
TRACE_DEBUG("mcp23017 found\n\r");
TRACE_DEBUG("mcp23017 found\r\n");
return 0;
out_err:
TRACE_WARNING("mcp23017 NOT found!\n\r");
TRACE_WARNING("mcp23017 NOT found!\r\n");
return -1;
}
int mcp23017_test(uint8_t slave)
{
printf("mcp23017_test\n\r");
printf("GPIOA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOA));
printf("GPIOB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_GPIOB));
printf("IODIRA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRA));
printf("IODIRB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IODIRB));
printf("IOCONA 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONA));
printf("IOCONB 0x%x\n\r", mcp23017_read_byte(slave,MCP23017_IOCONB));
printf("mcp23017_test\r\n");
printf("GPIOA 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_GPIOA));
printf("GPIOB 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_GPIOB));
printf("IODIRA 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_IODIRA));
printf("IODIRB 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_IODIRB));
printf("IOCONA 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_IOCONA));
printf("IOCONB 0x%x\r\n", mcp23017_read_byte(slave,MCP23017_IOCONB));
return 0;
}
@@ -142,13 +142,13 @@ int mcp23017_toggle(uint8_t slave)
static bool foo=false;
if (foo)
{
printf("+\n\r");
printf("+\r\n");
mcp23017_write_byte(slave, MCP23017_OLATB, 0x80);
foo=false;
}
else
{
printf("-\n\r");
printf("-\r\n");
mcp23017_write_byte(slave, MCP23017_OLATB, 0x00);
foo=true;
}

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "chip.h"
@@ -29,16 +25,16 @@ void board_exec_dbg_cmd(int ch)
{
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\tR\treset SAM3\n\r");
printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\r\n");
break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"
@@ -40,7 +36,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init();
}
TRACE_INFO("Modem %d: %s SIM\n\r", nr,
TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual");
switch (nr) {
@@ -57,7 +53,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break;
#endif
default:
TRACE_ERROR("Invalid SIM%u\n\r", nr);
TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1;
}

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"
@@ -29,6 +25,8 @@
#define BOARD_MAINOSC 12000000
/** desired main clock frequency (in Hz, based on BOARD_MAINOSC) */
#define BOARD_MCK 58000000 // 18.432 * 29 / 6
/** board has external clock, not crystal */
#define BOARD_MAINOSC_BYPASS
/** MCU pin connected to red LED */
#define PIO_LED_RED PIO_PA17
@@ -39,7 +37,7 @@
/** green LED pin definition */
#define PIN_LED_GREEN {PIO_LED_GREEN, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
/** LEDs pin definition */
#define PINS_LEDS PIN_LED_RED, PIN_LED_GREEN
#define PINS_LEDS PIN_LED_RED, PIN_LED_GREEN
/** index for red LED in LEDs pin definition array */
#define LED_NUM_RED 0
/** index for green LED in LEDs pin definition array */

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "simtrace.h"
@@ -78,27 +74,27 @@ static int write_hub_eeprom(void)
/* wait */
mdelay(100);
TRACE_INFO("Writing EEPROM...\n\r");
TRACE_INFO("Writing EEPROM...\r\n");
/* write the EEPROM once */
for (i = 0; i < ARRAY_SIZE(__eeprom_bin); i++) {
int rc = eeprom_write_byte(0x50, i, __eeprom_bin[i]);
if (rc < 0) {
TRACE_ERROR("Writing EEPROM failed at byte %u: 0x%02x\n\r",
TRACE_ERROR("Writing EEPROM failed at byte %u: 0x%02x\r\n",
i, __eeprom_bin[i]);
return 1;
}
}
/* then pursue re-reading it again and again */
TRACE_INFO("Verifying EEPROM...\n\r");
TRACE_INFO("Verifying EEPROM...\r\n");
for (i = 0; i < ARRAY_SIZE(__eeprom_bin); i++) {
int byte = eeprom_read_byte(0x50, i);
TRACE_DEBUG("0x%02x: %02x\n\r", i, byte);
TRACE_DEBUG("0x%02x: %02x\r\n", i, byte);
if (byte != __eeprom_bin[i])
TRACE_ERROR("Byte %u is wrong, expected 0x%02x, found 0x%02x\n\r",
TRACE_ERROR("Byte %u is wrong, expected 0x%02x, found 0x%02x\r\n",
i, __eeprom_bin[i], byte);
}
TRACE_INFO("EEPROM written\n\r");
TRACE_INFO("EEPROM written\r\n");
/* FIXME: Release PIN_PRTPWR_OVERRIDE after we know the hub is
* again powering us up */
@@ -113,17 +109,17 @@ static int erase_hub_eeprom(void)
/* wait */
mdelay(100);
TRACE_INFO("Erasing EEPROM...\n\r");
TRACE_INFO("Erasing EEPROM...\r\n");
/* write the EEPROM once */
for (i = 0; i < 256; i++) {
int rc = eeprom_write_byte(0x50, i, 0xff);
if (rc < 0) {
TRACE_ERROR("Erasing EEPROM failed at byte %u: 0x%02x\n\r",
TRACE_ERROR("Erasing EEPROM failed at byte %u: 0x%02x\r\n",
i, __eeprom_bin[i]);
return 1;
}
}
TRACE_INFO("EEPROM erased\n\r");
TRACE_INFO("EEPROM erased\r\n");
return 0;
}
@@ -147,41 +143,41 @@ static void board_exec_dbg_cmd_st12only(int ch)
break;
#endif /* ALLOW_PEER_ERASE */
case 'O':
printf("Setting PRTPWR_OVERRIDE\n\r");
printf("Setting PRTPWR_OVERRIDE\r\n");
PIO_Set(&pin_hubpwr_override);
break;
case 'o':
printf("Clearing PRTPWR_OVERRIDE\n\r");
printf("Clearing PRTPWR_OVERRIDE\r\n");
PIO_Clear(&pin_hubpwr_override);
break;
#if (ALLOW_PEER_ERASE > 0)
case 'H':
printf("Clearing _HUB_RESET -> HUB_RESET high (inactive)\n\r");
printf("Clearing _HUB_RESET -> HUB_RESET high (inactive)\r\n");
PIO_Clear(&pin_hub_rst);
break;
case 'h':
/* high level drives transistor -> HUB_RESET low */
printf("Asserting _HUB_RESET -> HUB_RESET low (active)\n\r");
printf("Asserting _HUB_RESET -> HUB_RESET low (active)\r\n");
PIO_Set(&pin_hub_rst);
break;
case 'w':
if (PIO_GetOutputDataStatus(&pin_hub_rst) == 0)
printf("WARNING: attempting EEPROM access while HUB not in reset\n\r");
printf("Please enter EEPROM offset:\n\r");
printf("WARNING: attempting EEPROM access while HUB not in reset\r\n");
printf("Please enter EEPROM offset:\r\n");
UART_GetIntegerMinMax(&addr, 0, 255);
printf("Please enter EEPROM value:\n\r");
printf("Please enter EEPROM value:\r\n");
UART_GetIntegerMinMax(&val, 0, 255);
printf("Writing value 0x%02lx to EEPROM offset 0x%02lx\n\r", val, addr);
printf("Writing value 0x%02lx to EEPROM offset 0x%02lx\r\n", val, addr);
eeprom_write_byte(0x50, addr, val);
break;
#endif /* ALLOW_PEER_ERASE */
case 'r':
printf("Please enter EEPROM offset:\n\r");
printf("Please enter EEPROM offset:\r\n");
UART_GetIntegerMinMax(&addr, 0, 255);
printf("EEPROM[0x%02lx] = 0x%02x\n\r", addr, eeprom_read_byte(0x50, addr));
printf("EEPROM[0x%02lx] = 0x%02x\r\n", addr, eeprom_read_byte(0x50, addr));
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}
@@ -198,93 +194,93 @@ void board_exec_dbg_cmd(int ch)
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\tR\treset SAM3\n\r");
printf("\tl\tswitch off LED 1\n\r");
printf("\tL\tswitch off LED 1\n\r");
printf("\tg\tswitch off LED 2\n\r");
printf("\tG\tswitch off LED 2\n\r");
printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\r\n");
printf("\tl\tswitch off LED 1\r\n");
printf("\tL\tswitch off LED 1\r\n");
printf("\tg\tswitch off LED 2\r\n");
printf("\tG\tswitch off LED 2\r\n");
if (qmod_sam3_is_12()) {
#if (ALLOW_PEER_ERASE > 0)
printf("\tE\tprogram EEPROM\n\r");
printf("\te\tErase EEPROM\n\r");
printf("\tE\tprogram EEPROM\r\n");
printf("\te\tErase EEPROM\r\n");
#endif /* ALLOW_PEER_ERASE */
printf("\tO\tEnable PRTPWR_OVERRIDE\n\r");
printf("\to\tDisable PRTPWR_OVERRIDE\n\r");
printf("\tO\tEnable PRTPWR_OVERRIDE\r\n");
printf("\to\tDisable PRTPWR_OVERRIDE\r\n");
#if (ALLOW_PEER_ERASE > 0)
printf("\tH\tRelease HUB RESET (high)\n\r");
printf("\th\tAssert HUB RESET (low)\n\r");
printf("\tw\tWrite single byte in EEPROM\n\r");
printf("\tH\tRelease HUB RESET (high)\r\n");
printf("\th\tAssert HUB RESET (low)\r\n");
printf("\tw\tWrite single byte in EEPROM\r\n");
#endif /* ALLOW_PEER_ERASE */
printf("\tr\tRead single byte from EEPROM\n\r");
printf("\tr\tRead single byte from EEPROM\r\n");
}
printf("\tX\tRelease peer SAM3 from reset\n\r");
printf("\tx\tAssert peer SAM3 reset\n\r");
printf("\tX\tRelease peer SAM3 from reset\r\n");
printf("\tx\tAssert peer SAM3 reset\r\n");
#if (ALLOW_PEER_ERASE > 0)
printf("\tY\tRelease peer SAM3 ERASE signal\n\r");
printf("\ta\tAllow asserting peer SAM3 ERASE signal\n\r");
printf("\ty\tAssert peer SAM3 ERASE signal\n\r");
printf("\tY\tRelease peer SAM3 ERASE signal\r\n");
printf("\ta\tAllow asserting peer SAM3 ERASE signal\r\n");
printf("\ty\tAssert peer SAM3 ERASE signal\r\n");
#endif /* ALLOW_PEER_ERASE */
printf("\tU\tProceed to USB Initialization\n\r");
printf("\t1\tGenerate 1ms reset pulse on WWAN1\n\r");
printf("\t2\tGenerate 1ms reset pulse on WWAN2\n\r");
printf("\t!\tSwitch Channel A from physical -> remote\n\r");
printf("\t@\tSwitch Channel B from physical -> remote\n\r");
printf("\tt\t(pseudo)talloc report\n\r");
printf("\tU\tProceed to USB Initialization\r\n");
printf("\t1\tGenerate 1ms reset pulse on WWAN1\r\n");
printf("\t2\tGenerate 1ms reset pulse on WWAN2\r\n");
printf("\t!\tSwitch Channel A from physical -> remote\r\n");
printf("\t@\tSwitch Channel B from physical -> remote\r\n");
printf("\tt\t(pseudo)talloc report\r\n");
break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
case 'l':
led_blink(LED_GREEN, BLINK_ALWAYS_OFF);
printf("LED 1 switched off\n\r");
printf("LED 1 switched off\r\n");
break;
case 'L':
led_blink(LED_GREEN, BLINK_ALWAYS_ON);
printf("LED 1 switched on\n\r");
printf("LED 1 switched on\r\n");
break;
case 'g':
led_blink(LED_RED, BLINK_ALWAYS_OFF);
printf("LED 2 switched off\n\r");
printf("LED 2 switched off\r\n");
break;
case 'G':
led_blink(LED_RED, BLINK_ALWAYS_ON);
printf("LED 2 switched on\n\r");
printf("LED 2 switched on\r\n");
break;
case 'X':
printf("Clearing _SIMTRACExx_RST -> SIMTRACExx_RST high (inactive)\n\r");
printf("Clearing _SIMTRACExx_RST -> SIMTRACExx_RST high (inactive)\r\n");
PIO_Clear(&pin_peer_rst);
break;
case 'x':
printf("Setting _SIMTRACExx_RST -> SIMTRACExx_RST low (active)\n\r");
printf("Setting _SIMTRACExx_RST -> SIMTRACExx_RST low (active)\r\n");
PIO_Set(&pin_peer_rst);
break;
#if (ALLOW_PEER_ERASE > 0)
case 'Y':
printf("Clearing SIMTRACExx_ERASE (inactive)\n\r");
printf("Clearing SIMTRACExx_ERASE (inactive)\r\n");
PIO_Clear(&pin_peer_erase);
break;
case 'a':
printf("Asserting SIMTRACExx_ERASE allowed on next command\n\r");
printf("Asserting SIMTRACExx_ERASE allowed on next command\r\n");
allow_erase = true;
break;
case 'y':
if (allow_erase) {
printf("Setting SIMTRACExx_ERASE (active)\n\r");
printf("Setting SIMTRACExx_ERASE (active)\r\n");
PIO_Set(&pin_peer_erase);
} else {
printf("Please first allow setting SIMTRACExx_ERASE\n\r");
printf("Please first allow setting SIMTRACExx_ERASE\r\n");
}
break;
#endif /* ALLOW_PEER_ERASE */
case '1':
printf("Resetting Modem 1 (of this SAM3)\n\r");
printf("Resetting Modem 1 (of this SAM3)\r\n");
wwan_perst_do_reset_pulse(0, 300);
break;
case '2':
printf("Resetting Modem 2 (of this SAM3)\n\r");
printf("Resetting Modem 2 (of this SAM3)\r\n");
wwan_perst_do_reset_pulse(1, 300);
break;
case '!':
@@ -298,7 +294,7 @@ void board_exec_dbg_cmd(int ch)
break;
default:
if (!qmod_sam3_is_12())
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
else
board_exec_dbg_cmd_st12only(ch);
break;
@@ -339,9 +335,9 @@ void board_main_top(void)
#endif
if (qmod_sam3_is_12()) {
TRACE_INFO("Detected Quad-Modem ST12\n\r");
TRACE_INFO("Detected Quad-Modem ST12\r\n");
} else {
TRACE_INFO("Detected Quad-Modem ST34\n\r");
TRACE_INFO("Detected Quad-Modem ST34\r\n");
#ifndef APPLICATION_dfu
/* make sure we use the second set of USB Strings
* calling the interfaces "Modem 3" and "Modem 4" rather

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <osmocom/core/timer.h>
#include "board.h"

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include <stdbool.h>

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"
@@ -40,7 +36,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init();
}
TRACE_INFO("Modem %d: %s SIM\n\r", nr,
TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual");
switch (nr) {
@@ -57,7 +53,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break;
#endif
default:
TRACE_ERROR("Invalid SIM%u\n\r", nr);
TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1;
}

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* Depending on the board this is running on, it might be possible
* for the controller to read the status of the WWAN LED output lines of

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* Depending on the board this is running on, it might be possible
* for the controller to set the status of the PERST input line of

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "simtrace.h"
@@ -28,16 +24,16 @@ void board_exec_dbg_cmd(int ch)
{
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\tR\treset SAM3\n\r");
printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\r\n");
break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}
@@ -61,7 +57,7 @@ int board_override_enter_dfu(void)
/* Enter DFU bootloader in case the respective button is pressed */
if (PIO_Get(&bl_sw_pin) == 0) {
/* do not print to early since the console is not initialized yet */
//printf("BOOTLOADER switch pressed -> Force DFU\n\r");
//printf("BOOTLOADER switch pressed -> Force DFU\r\n");
return 1;
} else
return 0;

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once
#include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "simtrace.h"
@@ -28,16 +24,16 @@ void board_exec_dbg_cmd(int ch)
{
switch (ch) {
case '?':
printf("\t?\thelp\n\r");
printf("\tR\treset SAM3\n\r");
printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\r\n");
break;
case 'R':
printf("Asking NVIC to reset us\n\r");
printf("Asking NVIC to reset us\r\n");
USBD_Disconnect();
NVIC_SystemReset();
break;
default:
printf("Unknown command '%c'\n\r", ch);
printf("Unknown command '%c'\r\n", ch);
break;
}
}
@@ -61,7 +57,7 @@ int board_override_enter_dfu(void)
/* Enter DFU bootloader in case the respective button is pressed */
if (PIO_Get(&bl_sw_pin) == 0) {
/* do not print to early since the console is not initialized yet */
//printf("BOOTLOADER switch pressed -> Force DFU\n\r");
//printf("BOOTLOADER switch pressed -> Force DFU\r\n");
return 1;
} else
return 0;

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"
@@ -32,7 +28,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
return -1;
}
TRACE_INFO("Modem %u: %s SIM\n\r", nr, physical ? "physical" : "virtual");
TRACE_INFO("Modem %u: %s SIM\r\n", nr, physical ? "physical" : "virtual");
if (physical) {
TRACE_INFO("%u: Use local/physical SIM\r\n", nr);

View File

@@ -89,11 +89,11 @@
/// \param condition Condition to verify.
#define ASSERT(condition) { \
if (!(condition)) { \
printf_sync("-F- ASSERT: %s %s:%d\n\r", #condition, __BASE_FILE__, __LINE__); \
printf_sync("-F- ASSERT: %s %s:%d\r\n", #condition, __BASE_FILE__, __LINE__); \
while (1); \
} \
}
#define SANITY_ERROR "Sanity check failed at %s:%d\n\r"
#define SANITY_ERROR "Sanity check failed at %s:%d\r\n"
/// Performs the same duty as the ASSERT() macro, except a default error
/// message is output if the condition is false.

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#ifndef SIMTRACE_RINGBUF_H
#define SIMTRACE_RINGBUF_H

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#ifndef SIMTRACE_H
#define SIMTRACE_H

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* SIMtrace USB IDs */
#define USB_VENDOR_OPENMOKO 0x1d50

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#pragma once

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdio.h>
#include <assert.h>
@@ -268,24 +264,24 @@ struct msgb *usb_buf_alloc_st(uint8_t ep, uint8_t msg_class, uint8_t msg_type)
if (!msg) { // allocation failed, we might be out of memory
struct usb_buffered_ep *bep = usb_get_buf_ep(ep);
if (!bep) {
TRACE_ERROR("ep %u: %s queue does not exist\n\r",
TRACE_ERROR("ep %u: %s queue does not exist\r\n",
ep, __func__);
return NULL;
}
if (llist_empty(&bep->queue)) {
TRACE_ERROR("ep %u: %s EOMEM (queue already empty)\n\r",
TRACE_ERROR("ep %u: %s EOMEM (queue already empty)\r\n",
ep, __func__);
return NULL;
}
msg = msgb_dequeue_count(&bep->queue, &bep->queue_len);
if (!msg) {
TRACE_ERROR("ep %u: %s no msg in non-empty queue\n\r",
TRACE_ERROR("ep %u: %s no msg in non-empty queue\r\n",
ep, __func__);
return NULL;
}
usb_buf_free(msg);
msg = NULL;
TRACE_DEBUG("ep %u: %s queue msg dropped\n\r",
TRACE_DEBUG("ep %u: %s queue msg dropped\r\n",
ep, __func__);
}
}
@@ -317,7 +313,7 @@ static void flush_rx_buffer(struct card_handle *ch)
rd = (struct cardemu_usb_msg_rx_data *) msg->l2h;
rd->data_len = msgb_l2len(msg) - sizeof(*rd);
TRACE_INFO("%u: %s (%u)\n\r",
TRACE_DEBUG("%u: %s (%u)\r\n",
ch->num, __func__, rd->data_len);
usb_buf_upd_len_and_submit(msg);
@@ -464,11 +460,11 @@ static void card_set_state(struct card_handle *ch,
static int tx_byte_atr(struct card_handle *ch)
{
if (NULL == ch) {
TRACE_ERROR("ATR TX: no card handle provided\n\r");
TRACE_ERROR("ATR TX: no card handle provided\r\n");
return 0;
}
if (ISO_S_IN_ATR != ch->state) {
TRACE_ERROR("%u: ATR TX: no in ATR state\n\r", ch->num);
TRACE_ERROR("%u: ATR TX: no in ATR state\r\n", ch->num);
return 0;
}
@@ -816,7 +812,7 @@ static void send_tpdu_header(struct card_handle *ch)
struct cardemu_usb_msg_rx_data *rd;
uint8_t *cur;
TRACE_INFO("%u: %s: %02x %02x %02x %02x %02x\r\n",
TRACE_DEBUG("%u: %s: %02x %02x %02x %02x %02x\r\n",
ch->num, __func__,
ch->tpdu.hdr[0], ch->tpdu.hdr[1],
ch->tpdu.hdr[2], ch->tpdu.hdr[3],
@@ -1178,7 +1174,7 @@ int card_emu_set_atr(struct card_handle *ch, const uint8_t *atr, uint8_t len)
for (i = 0; i < ch->atr.len; i++) {
TRACE_INFO_WP("%02x ", atr[i]);
}
TRACE_INFO_WP("\n\r");
TRACE_INFO_WP("\r\n");
#endif
/* FIXME: race condition with transmitting ATR to reader? */

View File

@@ -184,7 +184,7 @@ static void RDRtoPCDatablock_ATR( void )
if( length > 5 ) {
ccidDriver.ProtocolDataStructure[1] = Atr[3]&0x0F; // TD(1)
ccidDriver.bProtocol = Atr[3]&0x0F; // TD(1)
TRACE_INFO("Protocol data structure: 0x%x\n\r",
TRACE_INFO("Protocol data structure: 0x%x\r\n",
ccidDriver.ProtocolDataStructure[1]);
}
@@ -367,7 +367,7 @@ static void PCtoRDRIccPowerOn( void )
// for emulation only //JCB
if ( ccidDriver.sCcidCommand.bSpecific_0 != VOLTS_5_0 ) {
TRACE_ERROR("POWER_NOT_SUPPORTED\n\r");
TRACE_ERROR("POWER_NOT_SUPPORTED\r\n");
}
else {
@@ -428,7 +428,7 @@ static void PCtoRDRXfrBlock( void )
uint16_t msglen = 0;
uint32_t ret;
TRACE_DEBUG("PCtoRDRXfrBlock\n\r");
TRACE_DEBUG("PCtoRDRXfrBlock\r\n");
// Check the block length
if ( ccidDriver.sCcidCommand.wLength > (configurationDescriptorsFS->ccid.dwMaxCCIDMessageLength-10) ) {
@@ -439,7 +439,7 @@ static void PCtoRDRXfrBlock( void )
// check bBWI
else if ( 0 != ccidDriver.sCcidCommand.bSpecific_0 ) {
TRACE_ERROR("Bad bBWI\n\r");
TRACE_ERROR("Bad bBWI\r\n");
}
else {
@@ -463,16 +463,16 @@ static void PCtoRDRXfrBlock( void )
}
else {
if (ccidDriver.ProtocolDataStructure[1] == PROTOCOL_T1) {
TRACE_DEBUG("Not supported T=1\n\r");
TRACE_DEBUG("Not supported T=1\r\n");
}
else {
TRACE_DEBUG("Not supported 0x%x\n\r", ccidDriver.ProtocolDataStructure[1]);
TRACE_DEBUG("Not supported 0x%x\r\n", ccidDriver.ProtocolDataStructure[1]);
}
}
break;
case CCID_FEATURES_EXC_APDU:
TRACE_DEBUG("Not supported CCID_FEATURES_EXC_APDU\n\r");
TRACE_DEBUG("Not supported CCID_FEATURES_EXC_APDU\r\n");
break;
default:
@@ -482,7 +482,7 @@ static void PCtoRDRXfrBlock( void )
}
ccidDriver.sCcidMessage.wLength = msglen;
TRACE_DEBUG("USB: 0x%X, 0x%X, 0x%X, 0x%X, 0x%X\n\r", ccidDriver.sCcidMessage.abData[0],
TRACE_DEBUG("USB: 0x%X, 0x%X, 0x%X, 0x%X, 0x%X\r\n", ccidDriver.sCcidMessage.abData[0],
ccidDriver.sCcidMessage.abData[1],
ccidDriver.sCcidMessage.abData[2],
ccidDriver.sCcidMessage.abData[3],
@@ -614,7 +614,7 @@ static void PCtoRDRSecure( void )
{
TRACE_DEBUG(".");
TRACE_DEBUG("For user\n\r");
TRACE_DEBUG("For user\r\n");
}
//------------------------------------------------------------------------------
@@ -628,7 +628,7 @@ static void PCtoRDRSecure( void )
static void PCtoRDRMechanical( void )
{
TRACE_DEBUG(".");
TRACE_DEBUG("Not implemented\n\r");
TRACE_DEBUG("Not implemented\r\n");
RDRtoPCSlotStatus();
}
@@ -682,7 +682,7 @@ static void vCCIDCommandNotSupported( void )
// Command not supported
// vCCIDReportError(CMD_NOT_SUPPORTED);
TRACE_DEBUG("CMD_NOT_SUPPORTED\n\r");
TRACE_DEBUG("CMD_NOT_SUPPORTED\r\n");
// Header fields settings
ccidDriver.sCcidMessage.bMessageType = RDR_TO_PC_SLOTSTATUS;
@@ -708,7 +708,7 @@ static void vCCIDSendResponse( void )
ccidDriver.sCcidMessage.bSizeToSend, 0, 0 );
} while (bStatus != USBD_STATUS_SUCCESS);
TRACE_DEBUG("bStatus: 0x%x\n\r", bStatus);
TRACE_DEBUG("bStatus: 0x%x\r\n", bStatus);
}
@@ -723,7 +723,7 @@ static void CCIDCommandDispatcher( void *pArg, uint8_t status, uint32_t transfer
TRACE_ERROR("USB error: %d", status);
return;
}
TRACE_DEBUG("Command: 0x%X 0x%x 0x%X 0x%X 0x%X 0x%X 0x%X\n\r\n\r",
TRACE_DEBUG("Command: 0x%X 0x%x 0x%X 0x%X 0x%X 0x%X 0x%X\r\n\r\n",
(unsigned int)ccidDriver.sCcidCommand.bMessageType,
(unsigned int)ccidDriver.sCcidCommand.wLength,
(unsigned int)ccidDriver.sCcidCommand.bSlot,
@@ -735,10 +735,10 @@ static void CCIDCommandDispatcher( void *pArg, uint8_t status, uint32_t transfer
// Check the slot number
if ( ccidDriver.sCcidCommand.bSlot > 0 ) {
TRACE_ERROR("BAD_SLOT_NUMBER\n\r");
TRACE_ERROR("BAD_SLOT_NUMBER\r\n");
}
TRACE_INFO("typ=0x%X\n\r", ccidDriver.sCcidCommand.bMessageType);
TRACE_INFO("typ=0x%X\r\n", ccidDriver.sCcidCommand.bMessageType);
ccidDriver.sCcidMessage.bStatus = 0;
@@ -807,7 +807,7 @@ static void CCIDCommandDispatcher( void *pArg, uint8_t status, uint32_t transfer
}
else {
// command not supported
TRACE_INFO("Not supported: PC_TO_RDR_T0APDU\n\r");
TRACE_INFO("Not supported: PC_TO_RDR_T0APDU\r\n");
vCCIDCommandNotSupported();
}
MessageToSend = 1;
@@ -834,7 +834,7 @@ static void CCIDCommandDispatcher( void *pArg, uint8_t status, uint32_t transfer
break;
default:
TRACE_DEBUG("default: Not supported: 0x%X\n\r", ccidDriver.sCcidCommand.bMessageType);
TRACE_DEBUG("default: Not supported: 0x%X\r\n", ccidDriver.sCcidCommand.bMessageType);
vCCIDCommandNotSupported();
MessageToSend = 1;
break;
@@ -853,7 +853,7 @@ static void CCIDCommandDispatcher( void *pArg, uint8_t status, uint32_t transfer
//------------------------------------------------------------------------------
static void CCID_RequestHandler(const USBGenericRequest *pRequest)
{
TRACE_DEBUG("CCID_RHl\n\r");
TRACE_DEBUG("CCID_RHl\r\n");
// Check if this is a class request
if (USBGenericRequest_GetType(pRequest) == USBGenericRequest_CLASS) {
@@ -862,23 +862,23 @@ static void CCID_RequestHandler(const USBGenericRequest *pRequest)
switch (USBGenericRequest_GetRequest(pRequest)) {
case CCIDGenericRequest_ABORT:
TRACE_DEBUG("CCIDGenericRequest_ABORT\n\r");
TRACE_DEBUG("CCIDGenericRequest_ABORT\r\n");
break;
case CCIDGenericRequest_GET_CLOCK_FREQUENCIES:
TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_CLOCK_FREQUENCIES\n\r");
TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_CLOCK_FREQUENCIES\r\n");
// A CCID with bNumClockSupported equal to 00h does not have
// to support this request
break;
case CCIDGenericRequest_GET_DATA_RATES:
TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_DATA_RATES\n\r");
TRACE_DEBUG("Not supported: CCIDGenericRequest_GET_DATA_RATES\r\n");
// A CCID with bNumDataRatesSupported equal to 00h does not have
// to support this request.
break;
default:
TRACE_WARNING( "CCIDDriver_RequestHandler: Unsupported request (%d)\n\r",
TRACE_WARNING( "CCIDDriver_RequestHandler: Unsupported request (%d)\r\n",
USBGenericRequest_GetRequest(pRequest));
USBD_Stall(0);
}
@@ -892,7 +892,7 @@ static void CCID_RequestHandler(const USBGenericRequest *pRequest)
else {
// Unsupported request type
TRACE_WARNING( "CCIDDriver_RequestHandler: Unsupported request type (%d)\n\r",
TRACE_WARNING( "CCIDDriver_RequestHandler: Unsupported request type (%d)\r\n",
USBGenericRequest_GetType(pRequest));
USBD_Stall(0);
}
@@ -921,7 +921,7 @@ void USBDCallbacks_RequestReceived(const USBGenericRequest *request)
void CCID_SmartCardRequest( void )
{
unsigned char bStatus;
TRACE_DEBUG("CCID_req\n\r");
TRACE_DEBUG("CCID_req\r\n");
do {

View File

@@ -0,0 +1,86 @@
/* SIMtrace 2 firmware crc stub
*
* (C) 2021 by sysmocom -s.f.m.c. GmbH, Author: Eric Wild <ewild@sysmocom.de>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <stdint.h>
#include "board.h"
#include "core_cm3.h"
#include "usb/device/dfu/dfu.h"
/*
* This file is a bit special, everything has to go to specific sections, and no globals are available.
* No external functions may be called, unless inlining is enforced!
*/
static void crc_check_stub();
__attribute__((section(".crcstub_table"))) volatile uint32_t crcstub_dummy_table[] = {
(uint32_t)0xdeadc0de, /* deliberately choose invalid value so unpatched image will not be started */
(uint32_t)crc_check_stub, /* must be valid flash addr */
(uint32_t)0xf1, /* crc value calculated by the host */
(uint32_t)0xf2, /* crc calc start address */
(uint32_t)0xf3 /* crc calc length (byte) */
};
__attribute__((section(".crcstub_code"))) static void do_crc32(int8_t c, uint32_t *crc_reg)
{
int32_t i, mask;
*crc_reg ^= c;
for (unsigned int j = 0; j < 8; j++)
if (*crc_reg & 1)
*crc_reg = (*crc_reg >> 1) ^ 0xEDB88320;
else
*crc_reg = *crc_reg >> 1;
}
__attribute__((section(".crcstub_code"), noinline)) static void crc_check_stub()
{
uint32_t crc_reg = 0xffffffff;
uint32_t expected_crc_val = crcstub_dummy_table[2];
uint8_t *crc_calc_startaddr = (uint8_t *)crcstub_dummy_table[3];
volatile uint32_t *actual_exc_tbl = (volatile uint32_t *)crc_calc_startaddr;
uint32_t crc_len = crcstub_dummy_table[4];
/* 4000ms wdt tickling */
WDT->WDT_MR = WDT_MR_WDRSTEN | WDT_MR_WDDBGHLT | WDT_MR_WDIDLEHLT | (((4000UL << 8) / 1000) << 16) |
((4000UL << 8) / 1000);
for (uint8_t *i = crc_calc_startaddr; i < crc_calc_startaddr + crc_len; i++)
do_crc32(*i, &crc_reg);
crc_reg = ~crc_reg;
if (crc_reg == expected_crc_val) {
/* this looks a bit awkward because we have to ensure the bx does not require a sp-relative load */
__asm__ volatile("\
mov r0, %0;\n\
mov r1, %1;\n\
MSR msp,r0;\n\
bx r1;"
:
: "r"(actual_exc_tbl[0]), "r"(actual_exc_tbl[1]));
} else {
/* no globals ! */
((struct dfudata *)0x20000000)->magic = USB_DFU_MAGIC;
__DSB();
for (;;) {
/* no functon call, since NVIC_SystemReset() might not be inlined! */
SCB->AIRCR = ((0x5FA << SCB_AIRCR_VECTKEY_Pos) | (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) |
SCB_AIRCR_SYSRESETREQ_Msk);
__DSB();
while (1)
;
}
}
}

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdio.h>
#include "uart_console.h"

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "llist_irqsafe.h"

View File

@@ -92,7 +92,7 @@ uint32_t ISO7816_GetChar( uint8_t *pCharToReceive, Usart_info *usart)
while( ((us_base->US_CSR & US_CSR_RXRDY) == 0) ) {
WDT_Restart(WDT);
if(timeout++ > 12000 * (BOARD_MCK/1000000)) {
TRACE_WARNING("TimeOut\n\r");
TRACE_WARNING("TimeOut\r\n");
return( 0 );
}
}
@@ -107,9 +107,9 @@ uint32_t ISO7816_GetChar( uint8_t *pCharToReceive, Usart_info *usart)
(1<<10)));
if (status != 0 ) {
TRACE_DEBUG("R:0x%" PRIX32 "\n\r", status);
TRACE_DEBUG("R:0x%" PRIX32 "\n\r", us_base->US_CSR);
TRACE_DEBUG("Nb:0x%" PRIX32 "\n\r", us_base->US_NER );
TRACE_DEBUG("R:0x%" PRIX32 "\r\n", status);
TRACE_DEBUG("R:0x%" PRIX32 "\r\n", us_base->US_CSR);
TRACE_DEBUG("Nb:0x%" PRIX32 "\r\n", us_base->US_NER );
us_base->US_CR = US_CR_RSTSTA;
}
@@ -159,11 +159,11 @@ uint32_t ISO7816_SendChar( uint8_t CharToSend, Usart_info *usart )
if (status != 0 ) {
TRACE_INFO("******* status: 0x%" PRIX32 " (Overrun: %" PRIX32
", NACK: %" PRIX32 ", Timeout: %" PRIX32 ", underrun: %" PRIX32 ")\n\r",
", NACK: %" PRIX32 ", Timeout: %" PRIX32 ", underrun: %" PRIX32 ")\r\n",
status, ((status & US_CSR_OVRE)>> 5), ((status & US_CSR_NACK) >> 13),
((status & US_CSR_TIMEOUT) >> 8), ((status & (1 << 10)) >> 10));
TRACE_INFO("E (USART CSR reg):0x%" PRIX32 "\n\r", us_base->US_CSR);
TRACE_INFO("Nb (Number of errors):0x%" PRIX32 "\n\r", us_base->US_NER );
TRACE_INFO("E (USART CSR reg):0x%" PRIX32 "\r\n", us_base->US_CSR);
TRACE_INFO("Nb (Number of errors):0x%" PRIX32 "\r\n", us_base->US_NER );
us_base->US_CR = US_CR_RSTSTA;
}
@@ -219,13 +219,13 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
uint8_t cmdCase;
uint32_t status = 0;
TRACE_INFO("pAPDU[0]=0x%X\n\r",pAPDU[0]);
TRACE_INFO("pAPDU[1]=0x%X\n\r",pAPDU[1]);
TRACE_INFO("pAPDU[2]=0x%X\n\r",pAPDU[2]);
TRACE_INFO("pAPDU[3]=0x%X\n\r",pAPDU[3]);
TRACE_INFO("pAPDU[4]=0x%X\n\r",pAPDU[4]);
TRACE_INFO("pAPDU[5]=0x%X\n\r",pAPDU[5]);
TRACE_INFO("wlength=%d\n\r",wLength);
TRACE_INFO("pAPDU[0]=0x%X\r\n",pAPDU[0]);
TRACE_INFO("pAPDU[1]=0x%X\r\n",pAPDU[1]);
TRACE_INFO("pAPDU[2]=0x%X\r\n",pAPDU[2]);
TRACE_INFO("pAPDU[3]=0x%X\r\n",pAPDU[3]);
TRACE_INFO("pAPDU[4]=0x%X\r\n",pAPDU[4]);
TRACE_INFO("pAPDU[5]=0x%X\r\n",pAPDU[5]);
TRACE_INFO("wlength=%d\r\n",wLength);
ISO7816_SendChar( pAPDU[0], &usart_sim ); /* CLA */
ISO7816_SendChar( pAPDU[1], &usart_sim ); /* INS */
@@ -272,7 +272,7 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
}
}
TRACE_DEBUG("CASE=0x%X NeNc=0x%X\n\r", cmdCase, NeNc);
TRACE_DEBUG("CASE=0x%X NeNc=0x%X\r\n", cmdCase, NeNc);
/* Handle Procedure Bytes */
do {
@@ -280,20 +280,20 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
if (status != 0) {
return status;
}
TRACE_INFO("procByte: 0x%X\n\r", procByte);
TRACE_INFO("procByte: 0x%X\r\n", procByte);
/* Handle NULL */
if ( procByte == ISO_NULL_VAL ) {
TRACE_INFO("INS\n\r");
TRACE_INFO("INS\r\n");
continue;
}
/* Handle SW1 */
else if ( ((procByte & 0xF0) ==0x60) || ((procByte & 0xF0) ==0x90) ) {
TRACE_INFO("SW1\n\r");
TRACE_INFO("SW1\r\n");
SW1 = 1;
}
/* Handle INS */
else if ( pAPDU[1] == procByte) {
TRACE_INFO("HdlINS\n\r");
TRACE_INFO("HdlINS\r\n");
if (cmdCase == CASE2) {
/* receive data from card */
do {
@@ -317,14 +317,14 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
#pragma GCC diagnostic ignored "-Wsign-compare"
if ( pAPDU[1] == (procByte ^ 0xff)) {
#pragma GCC diagnostic pop
TRACE_INFO("HdlINS+\n\r");
TRACE_INFO("HdlINS+\r\n");
if (cmdCase == CASE2) {
/* receive data from card */
status = ISO7816_GetChar(&pMessage[indexMsg++], &usart_sim);
if (status != 0) {
return status;
}
TRACE_INFO("Rcv: 0x%X\n\r", pMessage[indexMsg-1]);
TRACE_INFO("Rcv: 0x%X\r\n", pMessage[indexMsg-1]);
}
else {
status = ISO7816_SendChar(pAPDU[indexApdu++], &usart_sim);
@@ -336,7 +336,7 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
}
else {
/* ?? */
TRACE_INFO("procByte=0x%X\n\r", procByte);
TRACE_INFO("procByte=0x%X\r\n", procByte);
break;
}
} while (NeNc != 0);
@@ -356,7 +356,7 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
return status;
}
TRACE_WARNING("SW1=0x%X, SW2=0x%X\n\r", pMessage[indexMsg-2], pMessage[indexMsg-1]);
TRACE_WARNING("SW1=0x%X, SW2=0x%X\r\n", pMessage[indexMsg-2], pMessage[indexMsg-1]);
*retlen = indexMsg;
return status;
@@ -368,7 +368,7 @@ uint32_t ISO7816_XfrBlockTPDU_T0(const uint8_t *pAPDU,
*/
void ISO7816_Escape( void )
{
TRACE_DEBUG("For user, if needed\n\r");
TRACE_DEBUG("For user, if needed\r\n");
}
/**
@@ -376,7 +376,7 @@ void ISO7816_Escape( void )
*/
void ISO7816_RestartClock( void )
{
TRACE_DEBUG("ISO7816_RestartClock\n\r");
TRACE_DEBUG("ISO7816_RestartClock\r\n");
USART_SIM->US_BRGR = 13;
}
@@ -385,7 +385,7 @@ void ISO7816_RestartClock( void )
*/
void ISO7816_StopClock( void )
{
TRACE_DEBUG("ISO7816_StopClock\n\r");
TRACE_DEBUG("ISO7816_StopClock\r\n");
USART_SIM->US_BRGR = 0;
}
@@ -394,8 +394,8 @@ void ISO7816_StopClock( void )
*/
void ISO7816_toAPDU( void )
{
TRACE_DEBUG("ISO7816_toAPDU\n\r");
TRACE_DEBUG("Not supported at this time\n\r");
TRACE_DEBUG("ISO7816_toAPDU\r\n");
TRACE_DEBUG("Not supported at this time\r\n");
}
/**
@@ -549,26 +549,26 @@ void ISO7816_Decode_ATR( uint8_t* pAtr )
uint32_t y;
uint8_t offset;
printf("\n\r");
printf("ATR: Answer To Reset:\n\r");
printf("\r\n");
printf("ATR: Answer To Reset:\r\n");
printf("TS = 0x%X Initial character ",pAtr[0]);
if( pAtr[0] == 0x3B ) {
printf("Direct Convention\n\r");
printf("Direct Convention\r\n");
}
else {
if( pAtr[0] == 0x3F ) {
printf("Inverse Convention\n\r");
printf("Inverse Convention\r\n");
}
else {
printf("BAD Convention\n\r");
printf("BAD Convention\r\n");
}
}
printf("T0 = 0x%X Format caracter\n\r",pAtr[1]);
printf(" Number of historical bytes: K = %d\n\r", pAtr[1]&0x0F);
printf(" Presence further interface byte:\n\r");
printf("T0 = 0x%X Format caracter\r\n",pAtr[1]);
printf(" Number of historical bytes: K = %d\r\n", pAtr[1]&0x0F);
printf(" Presence further interface byte:\r\n");
if( pAtr[1]&0x80 ) {
printf("TA ");
}
@@ -582,7 +582,7 @@ void ISO7816_Decode_ATR( uint8_t* pAtr )
printf("TD ");
}
if( pAtr[1] != 0 ) {
printf(" present\n\r");
printf(" present\r\n");
}
i = 2;
@@ -598,11 +598,11 @@ void ISO7816_Decode_ATR( uint8_t* pAtr )
printf("FI = %d ", (pAtr[i]>>8));
printf("DI = %d", (pAtr[i]&0x0F));
}
printf("\n\r");
printf("\r\n");
i++;
}
if (y & 0x20) { /* TB[i] */
printf("TB[%d] = 0x%X\n\r", offset, pAtr[i]);
printf("TB[%d] = 0x%X\r\n", offset, pAtr[i]);
i++;
}
if (y & 0x40) { /* TC[i] */
@@ -610,11 +610,11 @@ void ISO7816_Decode_ATR( uint8_t* pAtr )
if( offset == 1 ) {
printf("Extra Guard Time: N = %d", pAtr[i]);
}
printf("\n\r");
printf("\r\n");
i++;
}
if (y & 0x80) { /* TD[i] */
printf("TD[%d] = 0x%X\n\r", offset, pAtr[i]);
printf("TD[%d] = 0x%X\r\n", offset, pAtr[i]);
y = pAtr[i++] & 0xF0;
}
else {
@@ -624,13 +624,13 @@ void ISO7816_Decode_ATR( uint8_t* pAtr )
}
/* Historical Bytes */
printf("Historical bytes:\n\r");
printf("Historical bytes:\r\n");
y = pAtr[1] & 0x0F;
for( j=0; j < y; j++ ) {
printf(" 0x%X", pAtr[i]);
i++;
}
printf("\n\r\n\r");
printf("\r\n\r\n");
}
@@ -645,7 +645,7 @@ void ISO7816_Set_Reset_Pin(const Pin *pPinIso7816RstMC) {
void ISO7816_Init( Usart_info *usart, bool master_clock )
{
uint32_t clk;
TRACE_DEBUG("ISO_Init\n\r");
TRACE_DEBUG("ISO_Init\r\n");
Usart *us_base = usart->base;
uint32_t us_id = usart->id;

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdint.h>
#include <errno.h>

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "board.h"
@@ -22,18 +18,18 @@
void print_banner(void)
{
printf("\n\r\n\r"
"=============================================================================\n\r"
"SIMtrace2 firmware " GIT_VERSION ", BOARD=" BOARD ", APP=" APPLICATION "\n\r"
"(C) 2010-2019 by Harald Welte, 2018-2019 by Kevin Redon\n\r"
"=============================================================================\n\r");
printf("\r\n\r\n"
"=============================================================================\r\n"
"SIMtrace2 firmware " GIT_VERSION ", BOARD=" BOARD ", APP=" APPLICATION "\r\n"
"(C) 2010-2019 by Harald Welte, 2018-2019 by Kevin Redon\r\n"
"=============================================================================\r\n");
#if (TRACE_LEVEL >= TRACE_LEVEL_INFO)
/* print chip-unique ID */
unsigned int unique_id[4];
EEFC_ReadUniqueID(unique_id);
TRACE_INFO("Chip ID: 0x%08lx (Ext 0x%08lx)\n\r", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID);
TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\n\r",
TRACE_INFO("Chip ID: 0x%08lx (Ext 0x%08lx)\r\n", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID);
TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n",
unique_id[0], unique_id[1], unique_id[2], unique_id[3]);
/* print reset cause */
@@ -46,9 +42,9 @@ void print_banner(void)
"user reset (NRST pin detected low)",
};
if (reset_cause < ARRAY_SIZE(reset_causes)) {
TRACE_INFO("Reset Cause: %s\n\r", reset_causes[reset_cause]);
TRACE_INFO("Reset Cause: %s\r\n", reset_causes[reset_cause]);
} else {
TRACE_INFO("Reset Cause: 0x%lx\n\r", (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos);
TRACE_INFO("Reset Cause: 0x%lx\r\n", (RSTC->RSTC_SR & RSTC_SR_RSTTYP_Msk) >> RSTC_SR_RSTTYP_Pos);
}
#endif
}

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "boardver_adc.h"

View File

@@ -84,15 +84,15 @@ static const Pin pinSmartCard = SMARTCARD_CONNECT_PIN;
static void ISR_PioSmartCard(const Pin * pPin)
{
/* FIXME: why is pinSmartCard.pio->PIO_ISR the wrong number?
printf("+++++ Trying to check for pending interrupts (PIO ISR: 0x%X)\n\r", pinSmartCard.pio->PIO_ISR);
printf("+++++ Mask: 0x%X\n\r", pinSmartCard.mask);
printf("+++++ Trying to check for pending interrupts (PIO ISR: 0x%X)\r\n", pinSmartCard.pio->PIO_ISR);
printf("+++++ Mask: 0x%X\r\n", pinSmartCard.mask);
Output:
+++++ Trying to check for pending interrupts (PIO ISR: 0x400)) = 1<<10
+++++ Mask: 0x100 = 1<<8
*/
// PA10 is DTXD, which is the debug uart transmit pin
printf("Interrupt!!\n\r");
printf("Interrupt!!\r\n");
/* Check all pending interrupts */
// FIXME: this if condition is not always true...
// if ( (pinSmartCard.pio->PIO_ISR & pinSmartCard.mask) != 0 )
@@ -100,11 +100,11 @@ Output:
/* Check current level on pin */
if (PIO_Get(&pinSmartCard) == 0) {
sim_inserted = 1;
printf("-I- Smartcard inserted\n\r");
printf("-I- Smartcard inserted\r\n");
CCID_Insertion();
} else {
sim_inserted = 0;
printf("-I- Smartcard removed\n\r");
printf("-I- Smartcard removed\r\n");
CCID_Removal();
}
}
@@ -115,7 +115,7 @@ Output:
*/
static void ConfigureCardDetection(void)
{
printf("+++++ Configure PIOs\n\r");
printf("+++++ Configure PIOs\r\n");
PIO_Configure(&pinSmartCard, 1);
NVIC_EnableIRQ(PIOA_IRQn);
PIO_EnableIt(&pinSmartCard);
@@ -177,7 +177,7 @@ void CCID_init(void)
// FIXME. what if smcard is not inserted?
if (PIO_Get(&pinSmartCard) == 0) {
printf("SIM card inserted\n\r");
printf("SIM card inserted\r\n");
CCID_Insertion();
}
}

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdint.h>
#include <stdio.h>

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "ringbuffer.h"
#include "trace.h"

View File

@@ -50,7 +50,7 @@ volatile ringbuf sim_rcv_buf = { {0}, 0, 0 };
static void Callback_PhoneRST_ISR(uint8_t * pArg, uint8_t status,
uint32_t transferred, uint32_t remaining)
{
printf("rstCB\n\r");
printf("rstCB\r\n");
PIO_EnableIt(&pinPhoneRST);
}
@@ -58,7 +58,7 @@ void ISR_PhoneRST(const Pin * pPin)
{
int ret;
// FIXME: no printfs in ISRs?
printf("+++ Int!! %lx\n\r", pinPhoneRST.pio->PIO_ISR);
printf("+++ Int!! %lx\r\n", pinPhoneRST.pio->PIO_ISR);
if (((pinPhoneRST.pio->PIO_ISR & pinPhoneRST.mask) != 0)) {
if (PIO_Get(&pinPhoneRST) == 0) {
printf(" 0 ");
@@ -136,8 +136,8 @@ void update_fidi(Usart_info *usart, uint8_t fidi)
}
usart->base->US_FIDI = (ratio & 0x7ff);
usart->base->US_CR |= US_CR_RXEN | US_CR_STTTO;
//TRACE_INFO("updated USART(%u) Fi(%u)/Di(%u) ratio(%d): %u\n\r", usart->id, fi, di, ratio, usart->base->US_FIDI);
//TRACE_INFO("updated USART(%u) Fi(%u)/Di(%u) ratio(%d): %u\r\n", usart->id, fi, di, ratio, usart->base->US_FIDI);
} else {
//TRACE_WARNING("computed Fi/Di ratio %d unsupported\n\r", ratio); /* don't print since this is function is also called by ISRs */
//TRACE_WARNING("computed Fi/Di ratio %d unsupported\r\n", ratio); /* don't print since this is function is also called by ISRs */
}
}

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
/* This code implement the Sniffer mode to sniff the communication between a
* SIM card (or any ISO 7816 smart card) and a phone (or any ISO 7816 card
@@ -215,7 +211,7 @@ static void update_wt(uint8_t wi, uint8_t d)
wt_d = d;
}
wt = wt_wi * 960UL * wt_d;
TRACE_INFO("WT updated to %lu ETU\n\r", wt);
TRACE_INFO("WT updated to %lu ETU\r\n", wt);
}
/*! Allocate USB buffer and push + initialize simtrace_msg_hdr
@@ -266,7 +262,7 @@ static void change_state(enum iso7816_3_sniff_state iso_state_new)
{
/* sanity check */
if (iso_state_new == iso_state) {
TRACE_WARNING("Already in ISO 7816 state %u\n\r", iso_state);
TRACE_WARNING("Already in ISO 7816 state %u\r\n", iso_state);
return;
}
@@ -299,7 +295,7 @@ static void change_state(enum iso7816_3_sniff_state iso_state_new)
/* save new state */
iso_state = iso_state_new;
TRACE_INFO("Changed to ISO 7816-3 state %u\n\r", iso_state);
TRACE_INFO("Changed to ISO 7816-3 state %u\r\n", iso_state);
}
const struct value_string data_flags[] = {
@@ -357,7 +353,7 @@ static void usb_send_data(enum simtrace_msg_type_sniff type, const uint8_t* data
for (i = 0; i < length; i++) {
printf("%02x ", data[i]);
}
printf("\n\r");
printf("\r\n");
/* Send data over USB */
struct msgb *usb_msg = usb_msg_alloc_hdr(SIMTRACE_USB_EP_CARD_DATAIN, SIMTRACE_MSGC_SNIFF, type);
@@ -381,11 +377,11 @@ static void usb_send_atr(uint32_t flags)
{
/* Check state */
if (ISO7816_S_IN_ATR != iso_state) {
TRACE_WARNING("Can't print ATR in ISO 7816-3 state %u\n\r", iso_state);
TRACE_WARNING("Can't print ATR in ISO 7816-3 state %u\r\n", iso_state);
return;
}
if (atr_i >= ARRAY_SIZE(atr)) {
TRACE_ERROR("ATR buffer overflow\n\r");
TRACE_ERROR("ATR buffer overflow\r\n");
return;
}
@@ -405,11 +401,11 @@ static void process_byte_atr(uint8_t byte)
/* sanity check */
if (ISO7816_S_IN_ATR != iso_state) {
TRACE_ERROR("Processing ATR data in wrong ISO 7816-3 state %u\n\r", iso_state);
TRACE_ERROR("Processing ATR data in wrong ISO 7816-3 state %u\r\n", iso_state);
return;
}
if (atr_i >= ARRAY_SIZE(atr)) {
TRACE_ERROR("ATR data overflow\n\r");
TRACE_ERROR("ATR data overflow\r\n");
return;
}
@@ -429,7 +425,7 @@ static void process_byte_atr(uint8_t byte)
atr_state = ATR_S_WAIT_T0; /* wait for format byte */
break;
default:
TRACE_WARNING("Invalid TS received\n\r");
TRACE_WARNING("Invalid TS received\r\n");
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
usb_send_atr(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_ATR); /* reset state */
@@ -507,7 +503,7 @@ static void process_byte_atr(uint8_t byte)
change_state(ISO7816_S_WAIT_TPDU); /* go to next state */
break;
default:
TRACE_INFO("Unknown ATR state %u\n\r", atr_state);
TRACE_INFO("Unknown ATR state %u\r\n", atr_state);
}
}
@@ -525,7 +521,7 @@ static void usb_send_pps(uint32_t flags)
} else if (ISO7816_S_IN_PPS_RSP == iso_state) {
pps_cur = pps_rsp;
} else {
TRACE_ERROR("Can't print PPS in ISO 7816-3 state %u\n\r", iso_state);
TRACE_ERROR("Can't print PPS in ISO 7816-3 state %u\r\n", iso_state);
return;
}
@@ -581,7 +577,7 @@ static void process_byte_pps(uint8_t byte)
} else if (ISO7816_S_IN_PPS_RSP == iso_state) {
pps_cur = pps_rsp;
} else {
TRACE_ERROR("Processing PPS data in wrong ISO 7816-3 state %u\n\r", iso_state);
TRACE_ERROR("Processing PPS data in wrong ISO 7816-3 state %u\r\n", iso_state);
return;
}
@@ -593,7 +589,7 @@ static void process_byte_pps(uint8_t byte)
pps_cur[0] = byte;
pps_state = PPS_S_WAIT_PPS0; /* go to next state */
} else {
TRACE_INFO("Invalid PPSS received\n\r");
TRACE_INFO("Invalid PPSS received\r\n");
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
usb_send_pps(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -658,22 +654,22 @@ static void process_byte_pps(uint8_t byte)
fn = 1;
dn = 1;
}
TRACE_INFO("PPS negotiation successful: Fn=%u Dn=%u\n\r",
TRACE_INFO("PPS negotiation successful: Fn=%u Dn=%u\r\n",
iso7816_3_fi_table[fn], iso7816_3_di_table[dn]);
update_fidi(&sniff_usart, pps_cur[2]);
update_wt(0, iso7816_3_di_table[dn]);
usb_send_fidi(pps_cur[2]); /* send Fi/Di change notification to host software over USB */
} else { /* checksum is invalid */
TRACE_INFO("PPS negotiation failed\n\r");
TRACE_INFO("PPS negotiation failed\r\n");
}
change_state(ISO7816_S_WAIT_TPDU); /* go to next state */
}
break;
case PPS_S_WAIT_END:
TRACE_WARNING("Unexpected PPS received %u\n\r", pps_state);
TRACE_WARNING("Unexpected PPS received %u\r\n", pps_state);
break;
default:
TRACE_WARNING("Unknown PPS state %u\n\r", pps_state);
TRACE_WARNING("Unknown PPS state %u\r\n", pps_state);
break;
}
}
@@ -686,7 +682,7 @@ static void usb_send_tpdu(uint32_t flags)
{
/* Check state */
if (ISO7816_S_IN_TPDU != iso_state) {
TRACE_WARNING("Can't print TPDU in ISO 7816-3 state %u\n\r", iso_state);
TRACE_WARNING("Can't print TPDU in ISO 7816-3 state %u\r\n", iso_state);
return;
}
@@ -698,11 +694,11 @@ static void process_byte_tpdu(uint8_t byte)
{
/* sanity check */
if (ISO7816_S_IN_TPDU != iso_state) {
TRACE_ERROR("Processing TPDU data in wrong ISO 7816-3 state %u\n\r", iso_state);
TRACE_ERROR("Processing TPDU data in wrong ISO 7816-3 state %u\r\n", iso_state);
return;
}
if (tpdu_packet_i >= ARRAY_SIZE(tpdu_packet)) {
TRACE_ERROR("TPDU data overflow\n\r");
TRACE_ERROR("TPDU data overflow\r\n");
return;
}
@@ -710,7 +706,7 @@ static void process_byte_tpdu(uint8_t byte)
switch (tpdu_state) {
case TPDU_S_CLA:
if (0xff == byte) {
TRACE_WARNING("0xff is not a valid class byte\n\r");
TRACE_WARNING("0xff is not a valid class byte\r\n");
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -722,7 +718,7 @@ static void process_byte_tpdu(uint8_t byte)
break;
case TPDU_S_INS:
if ((0x60 == (byte & 0xf0)) || (0x90 == (byte & 0xf0))) {
TRACE_WARNING("invalid CLA 0x%02x\n\r", byte);
TRACE_WARNING("invalid CLA 0x%02x\r\n", byte);
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -762,7 +758,7 @@ static void process_byte_tpdu(uint8_t byte)
tpdu_packet[tpdu_packet_i++] = byte;
tpdu_state = TPDU_S_SW2;
} else {
TRACE_WARNING("invalid SW1 0x%02x\n\r", byte);
TRACE_WARNING("invalid SW1 0x%02x\r\n", byte);
led_blink(LED_RED, BLINK_2F_O); /* indicate error to user */
usb_send_tpdu(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -791,7 +787,7 @@ static void process_byte_tpdu(uint8_t byte)
}
break;
default:
TRACE_ERROR("unhandled TPDU state %u\n\r", tpdu_state);
TRACE_ERROR("unhandled TPDU state %u\r\n", tpdu_state);
}
}
@@ -805,11 +801,11 @@ void Sniffer_usart_isr(void)
uint32_t csr = sniff_usart.base->US_CSR;
/* Verify if there was an error */
if (csr & US_CSR_OVRE) {
TRACE_WARNING("USART overrun error\n\r");
TRACE_WARNING("USART overrun error\r\n");
sniff_usart.base->US_CR |= US_CR_RSTSTA;
}
if (csr & US_CSR_FRAME) {
TRACE_WARNING("USART framing error\n\r");
TRACE_WARNING("USART framing error\r\n");
sniff_usart.base->US_CR |= US_CR_RSTSTA;
}
@@ -821,7 +817,7 @@ void Sniffer_usart_isr(void)
wt_remaining = wt;
/* Store sniffed data into buffer (also clear interrupt */
if (rbuf_is_full(&sniff_buffer)) {
TRACE_ERROR("USART buffer full\n\r");
TRACE_ERROR("USART buffer full\r\n");
} else {
rbuf_write(&sniff_buffer, byte);
}
@@ -857,7 +853,7 @@ static void Sniffer_reset_isr(const Pin* pPin)
{
/* Ensure an edge on the reset pin cause the interrupt */
if (pPin->id != pin_rst.id || 0 == (pPin->mask & pin_rst.mask)) {
TRACE_ERROR("Pin other than reset caused a interrupt\n\r");
TRACE_ERROR("Pin other than reset caused a interrupt\r\n");
return;
}
/* Update the ISO state according to the reset change (reset is active low) */
@@ -893,13 +889,13 @@ void Sniffer_usart0_irq(void)
/* Called during USB enumeration after device is enumerated by host */
void Sniffer_configure(void)
{
TRACE_INFO("Sniffer config\n\r");
TRACE_INFO("Sniffer config\r\n");
}
/* called when *different* configuration is set by host */
void Sniffer_exit(void)
{
TRACE_INFO("Sniffer exit\n\r");
TRACE_INFO("Sniffer exit\r\n");
/* Disable USART */
USART_DisableIt(sniff_usart.base, US_IER_RXRDY);
/* NOTE: don't forget to set the IRQ according to the USART peripheral used */
@@ -913,7 +909,7 @@ void Sniffer_exit(void)
/* called when *Sniffer* configuration is set by host */
void Sniffer_init(void)
{
TRACE_INFO("Sniffer Init\n\r");
TRACE_INFO("Sniffer Init\r\n");
/* Configure pins to sniff communication between phone and card */
PIO_Configure(pins_sniff, PIO_LISTSIZE(pins_sniff));
@@ -962,7 +958,7 @@ static void usb_send_change(uint32_t flags)
}
if (flags & SNIFF_CHANGE_FLAG_TIMEOUT_WT) {
printf("waiting time (WT) timeout\n\r");
printf("waiting time (WT) timeout\r\n");
}
/* Send message over USB */
@@ -1032,7 +1028,7 @@ void Sniffer_run(void)
process_byte_pps(byte);
break;
default:
TRACE_ERROR("Data received in unknown state %u\n\r", iso_state);
TRACE_ERROR("Data received in unknown state %u\r\n", iso_state);
}
}
@@ -1058,13 +1054,13 @@ void Sniffer_run(void)
}
if (ISO7816_S_RESET != iso_state) {
change_state(ISO7816_S_RESET);
printf("reset asserted\n\r");
printf("reset asserted\r\n");
}
}
if (change_flags & SNIFF_CHANGE_FLAG_RESET_DEASSERT) {
if (ISO7816_S_WAIT_ATR != iso_state) {
change_state(ISO7816_S_WAIT_ATR);
printf("reset de-asserted\n\r");
printf("reset de-asserted\r\n");
}
}
if (change_flags & SNIFF_CHANGE_FLAG_TIMEOUT_WT) {

View File

@@ -439,7 +439,7 @@ signed int vfprintf(FILE *pStream, const char *pFormat, va_list ap)
return rc;
}
if (rc >= MAX_STRING_SIZE) {
fputs("stdio.c: increase MAX_STRING_SIZE\n\r", stderr);
fputs("stdio.c: increase MAX_STRING_SIZE\r\n", stderr);
return rc;
}
@@ -469,7 +469,7 @@ signed int vfprintf_sync(FILE *pStream, const char *pFormat, va_list ap)
return rc;
}
if (rc >= MAX_STRING_SIZE) {
fputs_sync("stdio.c: increase MAX_STRING_SIZE\n\r", stderr);
fputs_sync("stdio.c: increase MAX_STRING_SIZE\r\n", stderr);
return rc;
}

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include <stdint.h>

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA
*/
#include "board.h"
#include "trace.h"

View File

@@ -14,10 +14,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once

Some files were not shown because too many files have changed in this diff Show More