9 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
123 changed files with 772 additions and 807 deletions

3
.gitignore vendored
View File

@@ -20,6 +20,9 @@ tags
host/simtrace2-list host/simtrace2-list
host/simtrace2-cardem-pcsc host/simtrace2-cardem-pcsc
host/contrib/simtrace2.spec host/contrib/simtrace2.spec
host/src/simtrace2-tool
host/tests
usb_strings_generated.h usb_strings_generated.h
firmware/usbstring/usbstring firmware/usbstring/usbstring
firmware/apps/*/usb_strings.txt.patched 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) # Create copies of binaries with -latest, -$GIT_VERSION (OS#4413, OS#3452)
cd "$(dirname "$0")/.." cd "$(dirname "$0")/.."
@@ -9,8 +9,10 @@ echo "Copying binaries with "-latest" and "-$GIT_VERSION" appended..."
cd firmware/bin cd firmware/bin
for ext in bin elf; do for ext in bin elf; do
for file in *."$ext"; do for file in *."$ext"; do
without_ext="${file%.*}" if ! [[ "$file" =~ ^(.*padded.*|.*nocrcstub.*)$ ]];then
cp -v "$file" "$without_ext-latest.$ext" without_ext="${file%.*}"
cp -v "$file" "$without_ext-$GIT_VERSION.$ext" cp -v "$file" "$without_ext-latest.$ext"
cp -v "$file" "$without_ext-$GIT_VERSION.$ext"
fi
done done
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 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 rxtxdatalen = ProtoField.uint16("usb_simtrace.rxtxdatalen", "rx/tx data length", base.HEX_DEC)
local rxtxdata = ProtoField.bytes("usb_simtrace.rxtxdata", "rx/tx (data)") 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) function dissect_rxtx(payload_data,pinfo,tree)
local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data") local headerSubtree = tree:add(usb_simtrace_protocol, payload_data, "rx/tx data")
local len = payload_data(8+4,2):le_uint(); local len = payload_data(4,2):le_uint();
local cmd32 = payload_data(8+0,4):le_uint(); local cmd32 = payload_data(0,4):le_uint();
headerSubtree:add(pb_and_rx, cmd32) headerSubtree:add(pb_and_rx, cmd32)
headerSubtree:add(pb_and_tx, 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(tpdu_hdr, cmd32)
headerSubtree:add(rxtxdatalen, len) 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 end
function usb_simtrace_protocol.dissector(buffer, pinfo, tree) 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]) pinfo.cols.info = string.format("Cmd 0x%04X : %s", command, control_commands[command])
local payload_data = buffer(8,length-8) local payload_data = buffer(8,length-8)
if(command == 0x0101 or command == 0x0106) then 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 else
subtree:add(payload, payload_data) subtree:add(payload, payload_data)
end 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(0x1d50616d, usb_simtrace_protocol)
usb_product_dissectors:add(0x1d50616e, usb_simtrace_protocol) usb_product_dissectors:add(0x1d50616e, usb_simtrace_protocol)
DissectorTable.get("usb.bulk"):add(0xffff, 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 end

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_RT = dfu.c dfu_runtime.c
C_LIBUSB_DFU = dfu.c dfu_desc.c dfu_driver.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 \ 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/common/source/*.c))
C_BOARD += $(notdir $(wildcard libboard/$(BOARD)/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 $(OUTPUT)-combined.bin: $(BIN)/$(BOARD)-dfu-flash-padded.bin $(OUTPUT)-dfu.bin
cat $^ > $@ cat $^ > $@
$(BIN) $(OBJ): apps/$(APP)/usb_strings_generated.h $(BIN) $(OBJ): apps/$(APP)/usb_strings_generated.h misc/crctool
mkdir -p $@ mkdir -p $@
usbstring/usbstring: usbstring/usbstring.c usbstring/usbstring: usbstring/usbstring.c
gcc $^ -o $@ gcc $^ -o $@
misc/crctool: misc/crctool.c
gcc $^ -o $@
.PHONY: apps/$(APP)/usb_strings.txt.patched .PHONY: apps/$(APP)/usb_strings.txt.patched
apps/$(APP)/usb_strings.txt.patched: apps/$(APP)/usb_strings.txt apps/$(APP)/usb_strings.txt.patched: apps/$(APP)/usb_strings.txt
sed "s/PRODUCT_STRING/$(shell cat libboard/$(BOARD)/product_string.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)$(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)$(NM) $(OUTPUT)-$(1).elf >$(OUTPUT)-$(1).elf.txt
$(SILENT)$(OBJCOPY) -O binary $(OUTPUT)-$(1).elf $(OUTPUT)-$(1).bin $(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) $$(C_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.c Makefile $(OBJ) $(BIN)
@echo [COMPILING $$<] @echo [COMPILING $$<]
@@ -261,26 +263,17 @@ $$(ASM_OBJECTS_$(1)): $(OBJ)/$(1)_%.o: %.S Makefile $(OBJ) $(BIN)
@echo [ASSEMBLING $$@] @echo [ASSEMBLING $$@]
$(SILENT)$(CC) $(ASFLAGS) -DENVIRONMENT_$(1) -DENVIRONMENT=\"$(1)\" -c -o $$@ $$< $(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 endef
ALL_MEMORIES = dfu flash ram ALL_MEMORIES = flash ram
$(foreach MEMORY, $(ALL_MEMORIES), $(eval $(call RULES,$(MEMORY)))) $(foreach MEMORY, $(ALL_MEMORIES), $(eval $(call RULES,$(MEMORY))))
# files with those names do exist.. # files with those names do exist..
.PHONY: ram
.PHONY: dfu .PHONY: dfu
.PHONY: flash dfu: $(OUTPUT)-dfu.bin
.PHONY: ram
ram: build_ram ram: build_ram
dfu: build_dfu .PHONY: flash
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
flash: build_flash flash: build_flash
#alternate way of embedding: obj file #alternate way of embedding: obj file
#ifeq ($(APP), dfu) #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 # $(SILENT)$(OBJCOPY) --rename-section .data=.fwupdate -I binary -O elf32-littlearm bin/$(BOARD)-dfu-flash.bin $(OBJ)/flash_fwupdate.o
#endif #endif
program: C_OBJECTS_dfu = $(addprefix $(OBJ)/dfu_, $(C_OBJECTS))
openocd -f openocd/openocd.cfg -c "init" -c "halt" -c "flash write_bank 0 ./bin/project-flash.bin 0" -c "reset" -c "shutdown" 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 SERIAL ?= /dev/ttyUSB0
log: log:

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "core_cm3.h" #include "core_cm3.h"
@@ -93,8 +89,14 @@ __attribute__((section(".ramfunc"), noinline, noreturn)) static void erase_first
flash_cmd(EFC_FCMD_EA, 0); flash_cmd(EFC_FCMD_EA, 0);
#endif #endif
flash_wait_ready(); flash_wait_ready();
for (;;) for (;;) {
NVIC_SystemReset(); /* 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 #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); EEFC_ReadUniqueID(g_unique_id);
printf("\n\r\n\r"); printf("\r\n\r\n");
printf("bootloader updater %s for board %s\n\r" printf("bootloader updater %s for board %s\r\n"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\n\r", "(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\r\n",
manifest_revision, manifest_board); manifest_revision, manifest_board);
/* clear g_dfu on power-up reset */ /* clear g_dfu on power-up reset */
memset(g_dfu, 0, sizeof(*g_dfu)); 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 */ /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */
USBD_Disconnect(); USBD_Disconnect();

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 * Headers
@@ -164,7 +160,7 @@ extern int main(void)
print_banner(); print_banner();
board_main_top(); board_main_top();
TRACE_INFO("USB init...\n\r"); TRACE_INFO("USB init...\r\n");
SIMtrace_USB_Initialize(); SIMtrace_USB_Initialize();
while (USBD_GetState() < USBD_STATE_CONFIGURED) { while (USBD_GetState() < USBD_STATE_CONFIGURED) {
@@ -173,7 +169,7 @@ extern int main(void)
#if 0 #if 0
if (i >= MAX_USB_ITER * 3) { if (i >= MAX_USB_ITER * 3) {
TRACE_ERROR("Resetting board (USB could " TRACE_ERROR("Resetting board (USB could "
"not be configured)\n\r"); "not be configured)\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
} }
@@ -181,19 +177,19 @@ extern int main(void)
i++; 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++) { for (i = 1; i < ARRAY_SIZE(config_func_ptrs); i++) {
if (config_func_ptrs[i].configure) if (config_func_ptrs[i].configure)
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) { if (config_func_ptrs[simtrace_config].init) {
config_func_ptrs[simtrace_config].init(); config_func_ptrs[simtrace_config].init();
} }
last_simtrace_config = simtrace_config; last_simtrace_config = simtrace_config;
TRACE_INFO("entering main loop...\n\r"); TRACE_INFO("entering main loop...\r\n");
while (1) { while (1) {
WDT_Restart(WDT); WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG #if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -211,12 +207,12 @@ extern int main(void)
isUsbConnected = 0; isUsbConnected = 0;
} }
} else if (isUsbConnected == 0) { } else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r"); TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1; isUsbConnected = 1;
} }
if (last_simtrace_config != simtrace_config) { 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); last_simtrace_config, simtrace_config);
if (config_func_ptrs[last_simtrace_config].exit) { if (config_func_ptrs[last_simtrace_config].exit) {
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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "utils.h" #include "utils.h"
@@ -82,9 +78,9 @@ int USBDFU_handle_dnload(uint8_t altif, unsigned int offset,
} }
#if TRACE_LEVEL >= TRACE_LEVEL_INFO #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 #else
printf("DL off=%u\n\r", offset); printf("DL off=%u\r\n", offset);
#endif #endif
#ifdef PINS_LEDS #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); rc = FLASHD_Unlock(addr, addr + len, 0, 0);
if (rc != 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; rc = DFU_RET_STALL;
break; break;
} }
rc = FLASHD_Write(addr, data, len); rc = FLASHD_Write(addr, data, len);
if (rc != 0) { 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; rc = DFU_RET_STALL;
break; break;
} }
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
if (((uint8_t*)addr)[i]!=data[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; rc = DFU_RET_STALL;
break; break;
} }
@@ -137,7 +133,7 @@ int USBDFU_handle_dnload(uint8_t altif, unsigned int offset,
rc = DFU_RET_ZLP; rc = DFU_RET_ZLP;
break; break;
default: 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; rc = DFU_RET_STALL;
break; break;
} }
@@ -183,11 +179,11 @@ int USBDFU_handle_upload(uint8_t altif, unsigned int offset,
memcpy(data, (void *)addr, req_len); memcpy(data, (void *)addr, req_len);
break; break;
default: 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 */ /* FIXME: set error codes */
return -1; return -1;
} }
printf("=%u\n\r", req_len); printf("=%u\r\n", req_len);
return req_len; return req_len;
} }
@@ -278,16 +274,16 @@ extern int main(void)
EEFC_ReadUniqueID(g_unique_id); EEFC_ReadUniqueID(g_unique_id);
printf("\n\r\n\r"); printf("\r\n\r\n");
print_line(); print_line();
printf("DFU bootloader %s for board %s\n\r" printf("DFU bootloader %s for board %s\r\n"
"(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\n\r", "(C) 2010-2017 by Harald Welte, 2018-2019 by Kevin Redon\r\n",
manifest_revision, manifest_board); manifest_revision, manifest_board);
print_line(); print_line();
#if (TRACE_LEVEL >= TRACE_LEVEL_INFO) #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("Chip ID: 0x%08lx (Ext 0x%08lx)\r\n", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID);
TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\n\r", TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n",
g_unique_id[0], g_unique_id[1], g_unique_id[0], g_unique_id[1],
g_unique_id[2], g_unique_id[3]); g_unique_id[2], g_unique_id[3]);
static const char* reset_causes[] = { static const char* reset_causes[] = {
@@ -298,9 +294,9 @@ extern int main(void)
"user reset (NRST pin detected low)", "user reset (NRST pin detected low)",
}; };
if (reset_cause < ARRAY_SIZE(reset_causes)) { 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 { } 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 #endif
@@ -310,25 +306,25 @@ extern int main(void)
switch (USBDFU_OverrideEnterDFU()) { switch (USBDFU_OverrideEnterDFU()) {
case 0: case 0:
if (SCB->VTOR < IFLASH_ADDR + BOARD_DFU_BOOT_SIZE) { if (SCB->VTOR < IFLASH_ADDR + BOARD_DFU_BOOT_SIZE) {
TRACE_INFO_WP("unknown\n\r"); TRACE_INFO_WP("unknown\r\n");
} else { } else {
TRACE_INFO_WP("DFU is the main application\n\r"); TRACE_INFO_WP("DFU is the main application\r\n");
} }
break; break;
case 1: 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; break;
case 2: 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; break;
case 3: 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; break;
case 4: // the is no reason 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; break;
default: default:
TRACE_INFO_WP("unknown\n\r"); TRACE_INFO_WP("unknown\r\n");
break; break;
} }
#endif #endif
@@ -339,7 +335,7 @@ extern int main(void)
board_main_top(); 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 */ /* Signal USB reset by disabling the pull-up on USB D+ for at least 10 ms */
USBD_Disconnect(); USBD_Disconnect();
mdelay(500); mdelay(500);
@@ -350,7 +346,7 @@ extern int main(void)
check_exec_dbg_cmd(); check_exec_dbg_cmd();
#if 1 #if 1
if (i >= MAX_USB_ITER * 3) { 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 g_dfu->magic = USB_DFU_MAGIC; // start the bootloader after reboot
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
@@ -362,7 +358,7 @@ extern int main(void)
/* Initialize the flash to be able to write it, using the IAP ROM code */ /* Initialize the flash to be able to write it, using the IAP ROM code */
FLASHD_Initialize(BOARD_MCK, 1); FLASHD_Initialize(BOARD_MCK, 1);
TRACE_INFO("entering main loop...\n\r"); TRACE_INFO("entering main loop...\r\n");
while (1) { while (1) {
WDT_Restart(WDT); WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG #if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -382,7 +378,7 @@ extern int main(void)
isUsbConnected = 0; isUsbConnected = 0;
} }
} else if (isUsbConnected == 0) { } else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r"); TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1; isUsbConnected = 1;
} }

View File

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

View File

@@ -4,5 +4,5 @@
void gpio_test_init(void) 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); PIO_InitializeInterrupts(0);
printf("\n\r\n\r" printf("\r\n\r\n"
"=============================================================================\n\r" "=============================================================================\r\n"
"GPIO Test firmware " GIT_VERSION " (C) 2019 Sysmocom GmbH\n\r" "GPIO Test firmware " GIT_VERSION " (C) 2019 Sysmocom GmbH\r\n"
"=============================================================================\n\r"); "=============================================================================\r\n");
board_main_top(); board_main_top();
TRACE_INFO("starting gpio test...\n\r"); TRACE_INFO("starting gpio test...\r\n");
gpio_test_init(); gpio_test_init();
TRACE_INFO("entering main loop...\n\r"); TRACE_INFO("entering main loop...\r\n");
while (1) { while (1) {
WDT_Restart(WDT); WDT_Restart(WDT);

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 * Headers
@@ -160,7 +156,7 @@ extern int main(void)
print_banner(); print_banner();
board_main_top(); board_main_top();
TRACE_INFO("USB init...\n\r"); TRACE_INFO("USB init...\r\n");
SIMtrace_USB_Initialize(); SIMtrace_USB_Initialize();
while (USBD_GetState() < USBD_STATE_CONFIGURED) { while (USBD_GetState() < USBD_STATE_CONFIGURED) {
@@ -169,7 +165,7 @@ extern int main(void)
#if 0 #if 0
if (i >= MAX_USB_ITER * 3) { if (i >= MAX_USB_ITER * 3) {
TRACE_ERROR("Resetting board (USB could " TRACE_ERROR("Resetting board (USB could "
"not be configured)\n\r"); "not be configured)\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
} }
@@ -177,17 +173,17 @@ extern int main(void)
i++; 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++) { for (i = 1; i < ARRAY_SIZE(config_func_ptrs); i++) {
if (config_func_ptrs[i].configure) if (config_func_ptrs[i].configure)
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(); config_func_ptrs[simtrace_config].init();
last_simtrace_config = simtrace_config; last_simtrace_config = simtrace_config;
TRACE_INFO("entering main loop...\n\r"); TRACE_INFO("entering main loop...\r\n");
while (1) { while (1) {
WDT_Restart(WDT); WDT_Restart(WDT);
#if TRACE_LEVEL >= TRACE_LEVEL_DEBUG #if TRACE_LEVEL >= TRACE_LEVEL_DEBUG
@@ -205,12 +201,12 @@ extern int main(void)
isUsbConnected = 0; isUsbConnected = 0;
} }
} else if (isUsbConnected == 0) { } else if (isUsbConnected == 0) {
TRACE_INFO("USB is now configured\n\r"); TRACE_INFO("USB is now configured\r\n");
isUsbConnected = 1; isUsbConnected = 1;
} }
if (last_simtrace_config != simtrace_config) { 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); last_simtrace_config, simtrace_config);
config_func_ptrs[last_simtrace_config].exit(); config_func_ptrs[last_simtrace_config].exit();
config_func_ptrs[simtrace_config].init(); config_func_ptrs[simtrace_config].init();

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 * Headers

View File

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

View File

@@ -134,7 +134,7 @@ static void ComputeLockRange( uint32_t dwStart, uint32_t dwEnd, uint32_t *pdwAct
// Store actual page numbers // Store actual page numbers
EFC_ComputeAddress( pStartEfc, wActualStartPage, 0, pdwActualStart ) ; EFC_ComputeAddress( pStartEfc, wActualStartPage, 0, pdwActualStart ) ;
EFC_ComputeAddress( pEndEfc, wActualEndPage, 0, pdwActualEnd ) ; 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 */ /* Check pending events */
if ( status != 0 ) 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 */ /* Find triggering source */
i = 0; i = 0;
@@ -119,7 +119,7 @@ extern void PioInterruptHandler( uint32_t id, Pio *pPio )
/* Source has PIOs whose statuses have changed */ /* Source has PIOs whose statuses have changed */
if ( (status & _aIntSources[i].pPin->mask) != 0 ) 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); _aIntSources[i].handler(_aIntSources[i].pPin);
status &= ~(_aIntSources[i].pPin->mask); status &= ~(_aIntSources[i].pPin->mask);
@@ -177,13 +177,13 @@ extern void PIOC_IrqHandler( void )
*/ */
extern void PIO_InitializeInterrupts( uint32_t dwPriority ) extern void PIO_InitializeInterrupts( uint32_t dwPriority )
{ {
TRACE_DEBUG( "PIO_Initialize()\n\r" ) ; TRACE_DEBUG( "PIO_Initialize()\r\n" ) ;
/* Reset sources */ /* Reset sources */
_dwNumSources = 0 ; _dwNumSources = 0 ;
/* Configure PIO interrupt sources */ /* Configure PIO interrupt sources */
TRACE_DEBUG( "PIO_Initialize: Configuring PIOA\n\r" ) ; TRACE_DEBUG( "PIO_Initialize: Configuring PIOA\r\n" ) ;
PMC_EnablePeripheral( ID_PIOA ) ; PMC_EnablePeripheral( ID_PIOA ) ;
PIOA->PIO_ISR ; PIOA->PIO_ISR ;
PIOA->PIO_IDR = 0xFFFFFFFF ; PIOA->PIO_IDR = 0xFFFFFFFF ;
@@ -192,7 +192,7 @@ extern void PIO_InitializeInterrupts( uint32_t dwPriority )
NVIC_SetPriority( PIOA_IRQn, dwPriority ) ; NVIC_SetPriority( PIOA_IRQn, dwPriority ) ;
NVIC_EnableIRQ( PIOA_IRQn ) ; NVIC_EnableIRQ( PIOA_IRQn ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOB\n\r" ) ; TRACE_DEBUG( "PIO_Initialize: Configuring PIOB\r\n" ) ;
PMC_EnablePeripheral( ID_PIOB ) ; PMC_EnablePeripheral( ID_PIOB ) ;
PIOB->PIO_ISR ; PIOB->PIO_ISR ;
PIOB->PIO_IDR = 0xFFFFFFFF ; PIOB->PIO_IDR = 0xFFFFFFFF ;
@@ -201,7 +201,7 @@ extern void PIO_InitializeInterrupts( uint32_t dwPriority )
NVIC_SetPriority( PIOB_IRQn, dwPriority ) ; NVIC_SetPriority( PIOB_IRQn, dwPriority ) ;
NVIC_EnableIRQ( PIOB_IRQn ) ; NVIC_EnableIRQ( PIOB_IRQn ) ;
TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\n\r" ) ; TRACE_DEBUG( "PIO_Initialize: Configuring PIOC\r\n" ) ;
PMC_EnablePeripheral( ID_PIOC ) ; PMC_EnablePeripheral( ID_PIOC ) ;
PIOC->PIO_ISR ; PIOC->PIO_ISR ;
PIOC->PIO_IDR = 0xFFFFFFFF ; PIOC->PIO_IDR = 0xFFFFFFFF ;
@@ -234,7 +234,7 @@ extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) )
Pio* pio ; Pio* pio ;
InterruptSource* pSource ; InterruptSource* pSource ;
TRACE_DEBUG( "PIO_ConfigureIt()\n\r" ) ; TRACE_DEBUG( "PIO_ConfigureIt()\r\n" ) ;
assert( pPin ) ; assert( pPin ) ;
pio = pPin->pio ; pio = pPin->pio ;
@@ -242,7 +242,7 @@ extern void PIO_ConfigureIt( const Pin *pPin, void (*handler)( const Pin* ) )
pSource = find_intsource4pin(pPin); pSource = find_intsource4pin(pPin);
if (!pSource) { if (!pSource) {
/* Define new source */ /* 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 ) ; assert( _dwNumSources < MAX_INTERRUPT_SOURCES ) ;
pSource = &(_aIntSources[_dwNumSources]) ; pSource = &(_aIntSources[_dwNumSources]) ;
pSource->pPin = pPin ; 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 ) extern void PIO_EnableIt( const Pin *pPin )
{ {
TRACE_DEBUG( "PIO_EnableIt()\n\r" ) ; TRACE_DEBUG( "PIO_EnableIt()\r\n" ) ;
assert( pPin != NULL ) ; assert( pPin != NULL ) ;
@@ -320,7 +320,7 @@ extern void PIO_DisableIt( const Pin *pPin )
{ {
assert( pPin != NULL ) ; assert( pPin != NULL ) ;
TRACE_DEBUG( "PIO_DisableIt()\n\r" ) ; TRACE_DEBUG( "PIO_DisableIt()\r\n" ) ;
pPin->pio->PIO_IDR = pPin->mask; 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) ) 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 else
{ {
@@ -75,7 +75,7 @@ extern void PMC_EnablePeripheral( uint32_t dwId )
dwId -= 32; dwId -= 32;
if ((PMC->PMC_PCSR1 & ((uint32_t)1 << dwId)) == ((uint32_t)1 << dwId)) 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 else
{ {
@@ -100,7 +100,7 @@ extern void PMC_DisablePeripheral( uint32_t dwId )
{ {
if ( (PMC->PMC_PCSR0 & ((uint32_t)1 << dwId)) != ((uint32_t)1 << 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 else
{ {
@@ -112,7 +112,7 @@ extern void PMC_DisablePeripheral( uint32_t dwId )
dwId -= 32 ; dwId -= 32 ;
if ( (PMC->PMC_PCSR1 & ((uint32_t)1 << dwId)) != ((uint32_t)1 << dwId) ) 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 else
{ {
@@ -132,7 +132,7 @@ extern void PMC_EnableAllPeripherals( void )
PMC->PMC_PCER1 = MASK_STATUS1 ; PMC->PMC_PCER1 = MASK_STATUS1 ;
while ( (PMC->PMC_PCSR1 & MASK_STATUS1) != 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 ; PMC->PMC_PCDR1 = MASK_STATUS1 ;
while ( (PMC->PMC_PCSR1 & MASK_STATUS1) != 0 ) ; 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) { if (timeOut == 0) {
TRACE_ERROR("USART_Write: Timed out.\n\r"); TRACE_ERROR("USART_Write: Timed out.\r\n");
return; return;
} }
timeOut--; timeOut--;
@@ -269,7 +269,7 @@ uint16_t USART_Read(
if (timeOut == 0) { if (timeOut == 0) {
TRACE_ERROR( "USART_Read: Timed out.\n\r" ) ; TRACE_ERROR( "USART_Read: Timed out.\r\n" ) ;
return 0; return 0;
} }
timeOut--; timeOut--;

View File

@@ -140,7 +140,7 @@ void USBD_ResetHandler()
void USBD_RequestHandler(uint8_t bEndpoint, void USBD_RequestHandler(uint8_t bEndpoint,
const USBGenericRequest* pRequest) const USBGenericRequest* pRequest)
{ {
TRACE_DEBUG("%s\n\r", "USBD_RequestHandler"); TRACE_DEBUG("%s\r\n", "USBD_RequestHandler");
if (bEndpoint != 0) { if (bEndpoint != 0) {
TRACE_WARNING("EP%d request not supported, default EP only", TRACE_WARNING("EP%d request not supported, default EP only",
bEndpoint); bEndpoint);
@@ -316,7 +316,7 @@ void USBD_RemoteWakeUp(void)
/* Device is NOT suspended */ /* Device is NOT suspended */
if (deviceState != USBD_STATE_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; return;
} }
USBD_HAL_Activate(); USBD_HAL_Activate();
@@ -356,7 +356,7 @@ void USBD_Disconnect(void)
*/ */
void USBD_Init(void) void USBD_Init(void)
{ {
TRACE_INFO_WP("USBD_Init\n\r"); TRACE_INFO_WP("USBD_Init\r\n");
/* HW Layer Initialize */ /* HW Layer Initialize */
USBD_HAL_Init(); USBD_HAL_Init();
@@ -367,7 +367,7 @@ void USBD_Init(void)
/* Upper Layer Initialize */ /* Upper Layer Initialize */
USBDCallbacks_Initialized(); 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; const USBConfigurationDescriptor *pConfiguration;
/* Use different descriptor depending on device speed */ /* Use different descriptor depending on device speed */
TRACE_DEBUG("%s\n\r", "SetConfiguration"); TRACE_DEBUG("%s\r\n", "SetConfiguration");
if (USBD_IsHighSpeed()) { if (USBD_IsHighSpeed()) {
@@ -361,7 +361,7 @@ static void GetDescriptor(
default: default:
TRACE_WARNING( TRACE_WARNING(
"USBDDriver_GetDescriptor: Unknown descriptor type (%d)\n\r", "USBDDriver_GetDescriptor: Unknown descriptor type (%d)\r\n",
type); type);
USBD_Stall(0); USBD_Stall(0);
} }
@@ -565,7 +565,7 @@ void USBDDriver_RequestHandler(
default: default:
TRACE_WARNING( TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown recipient (%d)\n\r", "USBDDriver_RequestHandler: Unknown recipient (%d)\r\n",
USBGenericRequest_GetRecipient(pRequest)); USBGenericRequest_GetRecipient(pRequest));
USBD_Stall(0); USBD_Stall(0);
} }
@@ -595,7 +595,7 @@ void USBDDriver_RequestHandler(
default: default:
TRACE_WARNING( TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", "USBDDriver_RequestHandler: Unknown feature selector (%d)\r\n",
USBFeatureRequest_GetFeatureSelector(pRequest)); USBFeatureRequest_GetFeatureSelector(pRequest));
USBD_Stall(0); USBD_Stall(0);
} }
@@ -642,7 +642,7 @@ void USBDDriver_RequestHandler(
default: default:
TRACE_WARNING( TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown feature selector (%d)\n\r", "USBDDriver_RequestHandler: Unknown feature selector (%d)\r\n",
USBFeatureRequest_GetFeatureSelector(pRequest)); USBFeatureRequest_GetFeatureSelector(pRequest));
USBD_Stall(0); USBD_Stall(0);
} }
@@ -665,7 +665,7 @@ void USBDDriver_RequestHandler(
default: default:
TRACE_WARNING( TRACE_WARNING(
"USBDDriver_RequestHandler: Unknown request code (%d)\n\r", "USBDDriver_RequestHandler: Unknown request code (%d)\r\n",
USBGenericRequest_GetRequest(pRequest)); USBGenericRequest_GetRequest(pRequest));
USBD_Stall(0); USBD_Stall(0);
} }

View File

@@ -14,10 +14,6 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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> #include <unistd.h>
@@ -53,7 +49,7 @@ struct dfudata *g_dfu = &_g_dfu;
WEAK void dfu_drv_updstatus(void) 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, /* we transition immediately from MANIFEST_SYNC to MANIFEST,
* as the flash-writing is not asynchronous in this * as the flash-writing is not asynchronous in this
@@ -76,7 +72,7 @@ static __dfufunc void handle_getstatus(void)
dstat.iString = 0; dstat.iString = 0;
memcpy(&dstat.bwPollTimeout, poll_timeout_10ms, sizeof(dstat.bwPollTimeout)); 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); 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; 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); 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; int rc;
TRACE_DEBUG("COMPLETE\n\r"); TRACE_DEBUG("COMPLETE\r\n");
if (status != USBD_STATUS_SUCCESS) { 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); USBD_Stall(0);
return; return;
} }
@@ -140,14 +136,14 @@ static int handle_dnload(uint16_t val, uint16_t len, int first)
int rc; int rc;
if (len > BOARD_DFU_PAGE_SIZE) { 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->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS; g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL; return DFU_RET_STALL;
} }
if (len & 0x03) { 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->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS; g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL; 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; g_dfu->total_bytes = 0;
if (len == 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; g_dfu->state = DFU_STATE_dfuMANIFEST_SYNC;
return DFU_RET_ZLP; return DFU_RET_ZLP;
} }
@@ -176,10 +172,10 @@ static void upload_cb(void *arg, unsigned char status, unsigned long int transfe
{ {
int rc; int rc;
TRACE_DEBUG("COMPLETE\n\r"); TRACE_DEBUG("COMPLETE\r\n");
if (status != USBD_STATUS_SUCCESS) { 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); USBD_Stall(0);
return; return;
} }
@@ -195,7 +191,7 @@ static int handle_upload(uint16_t val, uint16_t len, int first)
g_dfu->total_bytes = 0; g_dfu->total_bytes = 0;
if (len > BOARD_DFU_PAGE_SIZE) { 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->state = DFU_STATE_dfuERROR;
g_dfu->status = DFU_STATUS_errADDRESS; g_dfu->status = DFU_STATUS_errADDRESS;
return DFU_RET_STALL; 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); rc = USBDFU_handle_upload(if_altsettings[0], g_dfu->total_bytes, dfu_buf, len);
if (rc < 0) { 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; return DFU_RET_STALL;
} }
@@ -221,7 +217,7 @@ void USBDFU_DFU_RequestHandler(const USBGenericRequest *request)
uint16_t val = USBGenericRequest_GetValue(request); uint16_t val = USBGenericRequest_GetValue(request);
int rc, ret = DFU_RET_NOTHING; 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_GetType(request),
USBGenericRequest_GetRecipient(request), USBGenericRequest_GetRecipient(request),
val, len); val, len);

View File

@@ -15,10 +15,6 @@
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <board.h>
@@ -59,7 +55,7 @@ static __dfufunc void handle_getstatus(void)
dstat.iString = 0; dstat.iString = 0;
memcpy(&dstat.bwPollTimeout, poll_timeout_10ms, sizeof(dstat.bwPollTimeout)); 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); 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; 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); 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); uint16_t val = USBGenericRequest_GetValue(request);
int rc, ret = DFU_RET_NOTHING; 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_GetType(request),
USBGenericRequest_GetRecipient(request), USBGenericRequest_GetRecipient(request),
val, len); val, len);
@@ -163,7 +159,7 @@ void USBDFU_Runtime_RequestHandler(const USBGenericRequest *request)
/* we switch it DETACH state, send a ZLP and /* we switch it DETACH state, send a ZLP and
* return. The next USB reset in this state * return. The next USB reset in this state
* will then trigger DFURT_SwitchToDFU() below */ * 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; g_dfu->state = DFU_STATE_appDETACH;
USBD_Write(0, 0, 0, 0, 0); USBD_Write(0, 0, 0, 0, 0);
DFURT_SwitchToDFU(); DFURT_SwitchToDFU();

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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_ #ifndef _BOARD_
#define _BOARD_ #define _BOARD_

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #ifndef _MANIFEST_H
#define _MANIFEST_H #define _MANIFEST_H

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

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

View File

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

View File

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

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "boardver_adc.h" #include "boardver_adc.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <stdint.h>
#include <string.h> #include <string.h>

View File

@@ -7,10 +7,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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" #include "manifest.h"

View File

@@ -238,7 +238,7 @@ extern void UART_DumpFrame( uint8_t* pucFrame, uint32_t dwSize )
printf( "%02X ", pucFrame[dw] ) ; 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++ ) ; UART_PutChar( *pucTmp++ ) ;
} }
printf( "\n\r" ) ; printf( "\r\n" ) ;
} }
if ( (dwSize%16) != 0 ) 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] ) ; 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 ) 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 ; return 0 ;
} }
else else
{ {
printf( "\n\r" ) ; printf( "\r\n" ) ;
*pdwValue=dwValue ; *pdwValue=dwValue ;
return 1 ; return 1 ;
@@ -348,7 +348,7 @@ extern uint32_t UART_GetInteger( uint32_t* pdwValue )
} }
else else
{ {
printf( "\n\r'%c' not a number!\n\r", ucKey ) ; printf( "\r\n'%c' not a number!\r\n", ucKey ) ;
return 0 ; return 0 ;
} }
@@ -375,12 +375,12 @@ extern uint32_t UART_GetIntegerMinMax( uint32_t* pdwValue, uint32_t dwMin, uint3
if ( dwValue < dwMin || dwValue > dwMax ) 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 ; return 0 ;
} }
printf( "\n\r" ) ; printf( "\r\n" ) ;
*pdwValue = dwValue ; *pdwValue = dwValue ;
@@ -421,7 +421,7 @@ extern uint32_t UART_GetHexa32( uint32_t* pdwValue )
} }
else else
{ {
printf( "\n\rIt is not a hexa character!\n\r" ) ; printf( "\r\nIt is not a hexa character!\r\n" ) ;
return 0 ; return 0 ;
} }
@@ -429,7 +429,7 @@ extern uint32_t UART_GetHexa32( uint32_t* pdwValue )
} }
} }
printf("\n\r" ) ; printf("\r\n" ) ;
*pdwValue = dwValue ; *pdwValue = dwValue ;
return 1 ; return 1 ;

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "simtrace.h" #include "simtrace.h"
@@ -36,39 +32,39 @@ void board_exec_dbg_cmd(int ch)
{ {
switch (ch) { switch (ch) {
case '?': case '?':
printf("\t?\thelp\n\r"); printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\n\r"); printf("\tR\treset SAM3\r\n");
printf("\tl\tswitch off LED 1\n\r"); printf("\tl\tswitch off LED 1\r\n");
printf("\tL\tswitch on LED 1\n\r"); printf("\tL\tswitch on LED 1\r\n");
printf("\tg\tswitch off LED 2\n\r"); printf("\tg\tswitch off LED 2\r\n");
printf("\tG\tswitch on LED 2\n\r"); printf("\tG\tswitch on LED 2\r\n");
printf("\t1\tGenerate 1ms reset pulse on WWAN1\n\r"); printf("\t1\tGenerate 1ms reset pulse on WWAN1\r\n");
printf("\t!\tSwitch Channel A from physical -> remote\n\r"); printf("\t!\tSwitch Channel A from physical -> remote\r\n");
printf("\tt\t(pseudo)talloc report\n\r"); printf("\tt\t(pseudo)talloc report\r\n");
break; break;
case 'R': case 'R':
printf("Asking NVIC to reset us\n\r"); printf("Asking NVIC to reset us\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
break; break;
case 'l': case 'l':
led_blink(LED_GREEN, BLINK_ALWAYS_OFF); led_blink(LED_GREEN, BLINK_ALWAYS_OFF);
printf("LED 1 switched off\n\r"); printf("LED 1 switched off\r\n");
break; break;
case 'L': case 'L':
led_blink(LED_GREEN, BLINK_ALWAYS_ON); led_blink(LED_GREEN, BLINK_ALWAYS_ON);
printf("LED 1 switched on\n\r"); printf("LED 1 switched on\r\n");
break; break;
case 'g': case 'g':
led_blink(LED_RED, BLINK_ALWAYS_OFF); led_blink(LED_RED, BLINK_ALWAYS_OFF);
printf("LED 2 switched off\n\r"); printf("LED 2 switched off\r\n");
break; break;
case 'G': case 'G':
led_blink(LED_RED, BLINK_ALWAYS_ON); led_blink(LED_RED, BLINK_ALWAYS_ON);
printf("LED 2 switched on\n\r"); printf("LED 2 switched on\r\n");
break; break;
case '1': case '1':
printf("Resetting Modem\n\r"); printf("Resetting Modem\r\n");
wwan_perst_do_reset_pulse(0, 300); wwan_perst_do_reset_pulse(0, 300);
break; break;
case '!': case '!':
@@ -78,7 +74,7 @@ void board_exec_dbg_cmd(int ch)
talloc_report(NULL, stdout); talloc_report(NULL, stdout);
break; break;
default: default:
printf("Unknown command '%c'\n\r", ch); printf("Unknown command '%c'\r\n", ch);
break; break;
} }
} }

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <osmocom/core/timer.h>
#include "board.h" #include "board.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"
@@ -41,7 +37,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init(); sim_switch_init();
} }
TRACE_INFO("Modem %d: %s SIM\n\r", nr, TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual"); physical ? "physical" : "virtual");
switch (nr) { switch (nr) {
@@ -50,7 +46,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break; break;
default: default:
TRACE_ERROR("Invalid SIM%u\n\r", nr); TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1; return -1;
} }

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 /* 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 * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 /* 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 * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

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

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include <stdbool.h> #include <stdbool.h>

View File

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

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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" #include "chip.h"
@@ -29,16 +25,16 @@ void board_exec_dbg_cmd(int ch)
{ {
switch (ch) { switch (ch) {
case '?': case '?':
printf("\t?\thelp\n\r"); printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\n\r"); printf("\tR\treset SAM3\r\n");
break; break;
case 'R': case 'R':
printf("Asking NVIC to reset us\n\r"); printf("Asking NVIC to reset us\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
break; break;
default: default:
printf("Unknown command '%c'\n\r", ch); printf("Unknown command '%c'\r\n", ch);
break; break;
} }
} }

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"
@@ -40,7 +36,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init(); sim_switch_init();
} }
TRACE_INFO("Modem %d: %s SIM\n\r", nr, TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual"); physical ? "physical" : "virtual");
switch (nr) { switch (nr) {
@@ -57,7 +53,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break; break;
#endif #endif
default: default:
TRACE_ERROR("Invalid SIM%u\n\r", nr); TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1; return -1;
} }

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"
@@ -29,6 +25,8 @@
#define BOARD_MAINOSC 12000000 #define BOARD_MAINOSC 12000000
/** desired main clock frequency (in Hz, based on BOARD_MAINOSC) */ /** desired main clock frequency (in Hz, based on BOARD_MAINOSC) */
#define BOARD_MCK 58000000 // 18.432 * 29 / 6 #define BOARD_MCK 58000000 // 18.432 * 29 / 6
/** board has external clock, not crystal */
#define BOARD_MAINOSC_BYPASS
/** MCU pin connected to red LED */ /** MCU pin connected to red LED */
#define PIO_LED_RED PIO_PA17 #define PIO_LED_RED PIO_PA17
@@ -39,7 +37,7 @@
/** green LED pin definition */ /** green LED pin definition */
#define PIN_LED_GREEN {PIO_LED_GREEN, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT} #define PIN_LED_GREEN {PIO_LED_GREEN, PIOA, ID_PIOA, PIO_OUTPUT_1, PIO_DEFAULT}
/** LEDs pin definition */ /** 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 */ /** index for red LED in LEDs pin definition array */
#define LED_NUM_RED 0 #define LED_NUM_RED 0
/** index for green LED in LEDs pin definition array */ /** 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

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

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include <stdbool.h> #include <stdbool.h>

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"
@@ -40,7 +36,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
sim_switch_init(); sim_switch_init();
} }
TRACE_INFO("Modem %d: %s SIM\n\r", nr, TRACE_INFO("Modem %d: %s SIM\r\n", nr,
physical ? "physical" : "virtual"); physical ? "physical" : "virtual");
switch (nr) { switch (nr) {
@@ -57,7 +53,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
break; break;
#endif #endif
default: default:
TRACE_ERROR("Invalid SIM%u\n\r", nr); TRACE_ERROR("Invalid SIM%u\r\n", nr);
return -1; return -1;
} }

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 /* 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 * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 /* 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 * 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "simtrace.h" #include "simtrace.h"
@@ -28,16 +24,16 @@ void board_exec_dbg_cmd(int ch)
{ {
switch (ch) { switch (ch) {
case '?': case '?':
printf("\t?\thelp\n\r"); printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\n\r"); printf("\tR\treset SAM3\r\n");
break; break;
case 'R': case 'R':
printf("Asking NVIC to reset us\n\r"); printf("Asking NVIC to reset us\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
break; break;
default: default:
printf("Unknown command '%c'\n\r", ch); printf("Unknown command '%c'\r\n", ch);
break; break;
} }
} }
@@ -61,7 +57,7 @@ int board_override_enter_dfu(void)
/* Enter DFU bootloader in case the respective button is pressed */ /* Enter DFU bootloader in case the respective button is pressed */
if (PIO_Get(&bl_sw_pin) == 0) { if (PIO_Get(&bl_sw_pin) == 0) {
/* do not print to early since the console is not initialized yet */ /* 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; return 1;
} else } else
return 0; return 0;

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once
#include "board_common.h" #include "board_common.h"

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "simtrace.h" #include "simtrace.h"
@@ -28,16 +24,16 @@ void board_exec_dbg_cmd(int ch)
{ {
switch (ch) { switch (ch) {
case '?': case '?':
printf("\t?\thelp\n\r"); printf("\t?\thelp\r\n");
printf("\tR\treset SAM3\n\r"); printf("\tR\treset SAM3\r\n");
break; break;
case 'R': case 'R':
printf("Asking NVIC to reset us\n\r"); printf("Asking NVIC to reset us\r\n");
USBD_Disconnect(); USBD_Disconnect();
NVIC_SystemReset(); NVIC_SystemReset();
break; break;
default: default:
printf("Unknown command '%c'\n\r", ch); printf("Unknown command '%c'\r\n", ch);
break; break;
} }
} }
@@ -61,7 +57,7 @@ int board_override_enter_dfu(void)
/* Enter DFU bootloader in case the respective button is pressed */ /* Enter DFU bootloader in case the respective button is pressed */
if (PIO_Get(&bl_sw_pin) == 0) { if (PIO_Get(&bl_sw_pin) == 0) {
/* do not print to early since the console is not initialized yet */ /* 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; return 1;
} else } else
return 0; return 0;

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"
@@ -32,7 +28,7 @@ int sim_switch_use_physical(unsigned int nr, int physical)
return -1; 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) { if (physical) {
TRACE_INFO("%u: Use local/physical SIM\r\n", nr); TRACE_INFO("%u: Use local/physical SIM\r\n", nr);

View File

@@ -89,11 +89,11 @@
/// \param condition Condition to verify. /// \param condition Condition to verify.
#define ASSERT(condition) { \ #define ASSERT(condition) { \
if (!(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); \ 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 /// Performs the same duty as the ASSERT() macro, except a default error
/// message is output if the condition is false. /// message is output if the condition is false.

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #ifndef SIMTRACE_RINGBUF_H
#define SIMTRACE_RINGBUF_H #define SIMTRACE_RINGBUF_H

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #ifndef SIMTRACE_H
#define SIMTRACE_H #define SIMTRACE_H

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 */ /* SIMtrace USB IDs */
#define USB_VENDOR_OPENMOKO 0x1d50 #define USB_VENDOR_OPENMOKO 0x1d50

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <stdio.h>
#include <assert.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 if (!msg) { // allocation failed, we might be out of memory
struct usb_buffered_ep *bep = usb_get_buf_ep(ep); struct usb_buffered_ep *bep = usb_get_buf_ep(ep);
if (!bep) { 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__); ep, __func__);
return NULL; return NULL;
} }
if (llist_empty(&bep->queue)) { 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__); ep, __func__);
return NULL; return NULL;
} }
msg = msgb_dequeue_count(&bep->queue, &bep->queue_len); msg = msgb_dequeue_count(&bep->queue, &bep->queue_len);
if (!msg) { 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__); ep, __func__);
return NULL; return NULL;
} }
usb_buf_free(msg); usb_buf_free(msg);
msg = NULL; msg = NULL;
TRACE_DEBUG("ep %u: %s queue msg dropped\n\r", TRACE_DEBUG("ep %u: %s queue msg dropped\r\n",
ep, __func__); 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 = (struct cardemu_usb_msg_rx_data *) msg->l2h;
rd->data_len = msgb_l2len(msg) - sizeof(*rd); 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); ch->num, __func__, rd->data_len);
usb_buf_upd_len_and_submit(msg); 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) static int tx_byte_atr(struct card_handle *ch)
{ {
if (NULL == 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; return 0;
} }
if (ISO_S_IN_ATR != ch->state) { 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; return 0;
} }
@@ -816,7 +812,7 @@ static void send_tpdu_header(struct card_handle *ch)
struct cardemu_usb_msg_rx_data *rd; struct cardemu_usb_msg_rx_data *rd;
uint8_t *cur; 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->num, __func__,
ch->tpdu.hdr[0], ch->tpdu.hdr[1], ch->tpdu.hdr[0], ch->tpdu.hdr[1],
ch->tpdu.hdr[2], ch->tpdu.hdr[3], 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++) { for (i = 0; i < ch->atr.len; i++) {
TRACE_INFO_WP("%02x ", atr[i]); TRACE_INFO_WP("%02x ", atr[i]);
} }
TRACE_INFO_WP("\n\r"); TRACE_INFO_WP("\r\n");
#endif #endif
/* FIXME: race condition with transmitting ATR to reader? */ /* FIXME: race condition with transmitting ATR to reader? */

View File

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

View File

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

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <stdint.h>
#include <errno.h> #include <errno.h>

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
@@ -22,18 +18,18 @@
void print_banner(void) void print_banner(void)
{ {
printf("\n\r\n\r" printf("\r\n\r\n"
"=============================================================================\n\r" "=============================================================================\r\n"
"SIMtrace2 firmware " GIT_VERSION ", BOARD=" BOARD ", APP=" APPLICATION "\n\r" "SIMtrace2 firmware " GIT_VERSION ", BOARD=" BOARD ", APP=" APPLICATION "\r\n"
"(C) 2010-2019 by Harald Welte, 2018-2019 by Kevin Redon\n\r" "(C) 2010-2019 by Harald Welte, 2018-2019 by Kevin Redon\r\n"
"=============================================================================\n\r"); "=============================================================================\r\n");
#if (TRACE_LEVEL >= TRACE_LEVEL_INFO) #if (TRACE_LEVEL >= TRACE_LEVEL_INFO)
/* print chip-unique ID */ /* print chip-unique ID */
unsigned int unique_id[4]; unsigned int unique_id[4];
EEFC_ReadUniqueID(unique_id); EEFC_ReadUniqueID(unique_id);
TRACE_INFO("Chip ID: 0x%08lx (Ext 0x%08lx)\n\r", CHIPID->CHIPID_CIDR, CHIPID->CHIPID_EXID); 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\n\r", TRACE_INFO("Serial Nr. %08x-%08x-%08x-%08x\r\n",
unique_id[0], unique_id[1], unique_id[2], unique_id[3]); unique_id[0], unique_id[1], unique_id[2], unique_id[3]);
/* print reset cause */ /* print reset cause */
@@ -46,9 +42,9 @@ void print_banner(void)
"user reset (NRST pin detected low)", "user reset (NRST pin detected low)",
}; };
if (reset_cause < ARRAY_SIZE(reset_causes)) { 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 { } 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 #endif
} }

View File

@@ -12,10 +12,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "boardver_adc.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) static void ISR_PioSmartCard(const Pin * pPin)
{ {
/* FIXME: why is pinSmartCard.pio->PIO_ISR the wrong number? /* 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("+++++ Trying to check for pending interrupts (PIO ISR: 0x%X)\r\n", pinSmartCard.pio->PIO_ISR);
printf("+++++ Mask: 0x%X\n\r", pinSmartCard.mask); printf("+++++ Mask: 0x%X\r\n", pinSmartCard.mask);
Output: Output:
+++++ Trying to check for pending interrupts (PIO ISR: 0x400)) = 1<<10 +++++ Trying to check for pending interrupts (PIO ISR: 0x400)) = 1<<10
+++++ Mask: 0x100 = 1<<8 +++++ Mask: 0x100 = 1<<8
*/ */
// PA10 is DTXD, which is the debug uart transmit pin // PA10 is DTXD, which is the debug uart transmit pin
printf("Interrupt!!\n\r"); printf("Interrupt!!\r\n");
/* Check all pending interrupts */ /* Check all pending interrupts */
// FIXME: this if condition is not always true... // FIXME: this if condition is not always true...
// if ( (pinSmartCard.pio->PIO_ISR & pinSmartCard.mask) != 0 ) // if ( (pinSmartCard.pio->PIO_ISR & pinSmartCard.mask) != 0 )
@@ -100,11 +100,11 @@ Output:
/* Check current level on pin */ /* Check current level on pin */
if (PIO_Get(&pinSmartCard) == 0) { if (PIO_Get(&pinSmartCard) == 0) {
sim_inserted = 1; sim_inserted = 1;
printf("-I- Smartcard inserted\n\r"); printf("-I- Smartcard inserted\r\n");
CCID_Insertion(); CCID_Insertion();
} else { } else {
sim_inserted = 0; sim_inserted = 0;
printf("-I- Smartcard removed\n\r"); printf("-I- Smartcard removed\r\n");
CCID_Removal(); CCID_Removal();
} }
} }
@@ -115,7 +115,7 @@ Output:
*/ */
static void ConfigureCardDetection(void) static void ConfigureCardDetection(void)
{ {
printf("+++++ Configure PIOs\n\r"); printf("+++++ Configure PIOs\r\n");
PIO_Configure(&pinSmartCard, 1); PIO_Configure(&pinSmartCard, 1);
NVIC_EnableIRQ(PIOA_IRQn); NVIC_EnableIRQ(PIOA_IRQn);
PIO_EnableIt(&pinSmartCard); PIO_EnableIt(&pinSmartCard);
@@ -177,7 +177,7 @@ void CCID_init(void)
// FIXME. what if smcard is not inserted? // FIXME. what if smcard is not inserted?
if (PIO_Get(&pinSmartCard) == 0) { if (PIO_Get(&pinSmartCard) == 0) {
printf("SIM card inserted\n\r"); printf("SIM card inserted\r\n");
CCID_Insertion(); CCID_Insertion();
} }
} }

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <stdint.h>
#include <stdio.h> #include <stdio.h>

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "ringbuffer.h"
#include "trace.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, static void Callback_PhoneRST_ISR(uint8_t * pArg, uint8_t status,
uint32_t transferred, uint32_t remaining) uint32_t transferred, uint32_t remaining)
{ {
printf("rstCB\n\r"); printf("rstCB\r\n");
PIO_EnableIt(&pinPhoneRST); PIO_EnableIt(&pinPhoneRST);
} }
@@ -58,7 +58,7 @@ void ISR_PhoneRST(const Pin * pPin)
{ {
int ret; int ret;
// FIXME: no printfs in ISRs? // 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 (((pinPhoneRST.pio->PIO_ISR & pinPhoneRST.mask) != 0)) {
if (PIO_Get(&pinPhoneRST) == 0) { if (PIO_Get(&pinPhoneRST) == 0) {
printf(" 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_FIDI = (ratio & 0x7ff);
usart->base->US_CR |= US_CR_RXEN | US_CR_STTTO; 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 { } 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 * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 /* 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 * 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_d = d;
} }
wt = wt_wi * 960UL * wt_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 /*! 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 */ /* sanity check */
if (iso_state_new == iso_state) { 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; return;
} }
@@ -299,7 +295,7 @@ static void change_state(enum iso7816_3_sniff_state iso_state_new)
/* save new state */ /* save new state */
iso_state = iso_state_new; 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[] = { 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++) { for (i = 0; i < length; i++) {
printf("%02x ", data[i]); printf("%02x ", data[i]);
} }
printf("\n\r"); printf("\r\n");
/* Send data over USB */ /* Send data over USB */
struct msgb *usb_msg = usb_msg_alloc_hdr(SIMTRACE_USB_EP_CARD_DATAIN, SIMTRACE_MSGC_SNIFF, type); 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 */ /* Check state */
if (ISO7816_S_IN_ATR != iso_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; return;
} }
if (atr_i >= ARRAY_SIZE(atr)) { if (atr_i >= ARRAY_SIZE(atr)) {
TRACE_ERROR("ATR buffer overflow\n\r"); TRACE_ERROR("ATR buffer overflow\r\n");
return; return;
} }
@@ -405,11 +401,11 @@ static void process_byte_atr(uint8_t byte)
/* sanity check */ /* sanity check */
if (ISO7816_S_IN_ATR != iso_state) { 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; return;
} }
if (atr_i >= ARRAY_SIZE(atr)) { if (atr_i >= ARRAY_SIZE(atr)) {
TRACE_ERROR("ATR data overflow\n\r"); TRACE_ERROR("ATR data overflow\r\n");
return; return;
} }
@@ -429,7 +425,7 @@ static void process_byte_atr(uint8_t byte)
atr_state = ATR_S_WAIT_T0; /* wait for format byte */ atr_state = ATR_S_WAIT_T0; /* wait for format byte */
break; break;
default: 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 */ 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 */ usb_send_atr(SNIFF_DATA_FLAG_ERROR_MALFORMED); /* send ATR to host software using USB */
change_state(ISO7816_S_WAIT_ATR); /* reset state */ 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 */ change_state(ISO7816_S_WAIT_TPDU); /* go to next state */
break; break;
default: 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) { } else if (ISO7816_S_IN_PPS_RSP == iso_state) {
pps_cur = pps_rsp; pps_cur = pps_rsp;
} else { } 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; return;
} }
@@ -581,7 +577,7 @@ static void process_byte_pps(uint8_t byte)
} else if (ISO7816_S_IN_PPS_RSP == iso_state) { } else if (ISO7816_S_IN_PPS_RSP == iso_state) {
pps_cur = pps_rsp; pps_cur = pps_rsp;
} else { } 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; return;
} }
@@ -593,7 +589,7 @@ static void process_byte_pps(uint8_t byte)
pps_cur[0] = byte; pps_cur[0] = byte;
pps_state = PPS_S_WAIT_PPS0; /* go to next state */ pps_state = PPS_S_WAIT_PPS0; /* go to next state */
} else { } 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 */ 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 */ 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 */ 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; fn = 1;
dn = 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]); iso7816_3_fi_table[fn], iso7816_3_di_table[dn]);
update_fidi(&sniff_usart, pps_cur[2]); update_fidi(&sniff_usart, pps_cur[2]);
update_wt(0, iso7816_3_di_table[dn]); update_wt(0, iso7816_3_di_table[dn]);
usb_send_fidi(pps_cur[2]); /* send Fi/Di change notification to host software over USB */ usb_send_fidi(pps_cur[2]); /* send Fi/Di change notification to host software over USB */
} else { /* checksum is invalid */ } 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 */ change_state(ISO7816_S_WAIT_TPDU); /* go to next state */
} }
break; break;
case PPS_S_WAIT_END: 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; break;
default: default:
TRACE_WARNING("Unknown PPS state %u\n\r", pps_state); TRACE_WARNING("Unknown PPS state %u\r\n", pps_state);
break; break;
} }
} }
@@ -686,7 +682,7 @@ static void usb_send_tpdu(uint32_t flags)
{ {
/* Check state */ /* Check state */
if (ISO7816_S_IN_TPDU != iso_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; return;
} }
@@ -698,11 +694,11 @@ static void process_byte_tpdu(uint8_t byte)
{ {
/* sanity check */ /* sanity check */
if (ISO7816_S_IN_TPDU != iso_state) { 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; return;
} }
if (tpdu_packet_i >= ARRAY_SIZE(tpdu_packet)) { if (tpdu_packet_i >= ARRAY_SIZE(tpdu_packet)) {
TRACE_ERROR("TPDU data overflow\n\r"); TRACE_ERROR("TPDU data overflow\r\n");
return; return;
} }
@@ -710,7 +706,7 @@ static void process_byte_tpdu(uint8_t byte)
switch (tpdu_state) { switch (tpdu_state) {
case TPDU_S_CLA: case TPDU_S_CLA:
if (0xff == byte) { 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 */ 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 */ 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 */ change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -722,7 +718,7 @@ static void process_byte_tpdu(uint8_t byte)
break; break;
case TPDU_S_INS: case TPDU_S_INS:
if ((0x60 == (byte & 0xf0)) || (0x90 == (byte & 0xf0))) { 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 */ 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 */ 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 */ 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_packet[tpdu_packet_i++] = byte;
tpdu_state = TPDU_S_SW2; tpdu_state = TPDU_S_SW2;
} else { } 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 */ 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 */ 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 */ change_state(ISO7816_S_WAIT_TPDU); /* go back to TPDU state */
@@ -791,7 +787,7 @@ static void process_byte_tpdu(uint8_t byte)
} }
break; break;
default: 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; uint32_t csr = sniff_usart.base->US_CSR;
/* Verify if there was an error */ /* Verify if there was an error */
if (csr & US_CSR_OVRE) { 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; sniff_usart.base->US_CR |= US_CR_RSTSTA;
} }
if (csr & US_CSR_FRAME) { 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; sniff_usart.base->US_CR |= US_CR_RSTSTA;
} }
@@ -821,7 +817,7 @@ void Sniffer_usart_isr(void)
wt_remaining = wt; wt_remaining = wt;
/* Store sniffed data into buffer (also clear interrupt */ /* Store sniffed data into buffer (also clear interrupt */
if (rbuf_is_full(&sniff_buffer)) { if (rbuf_is_full(&sniff_buffer)) {
TRACE_ERROR("USART buffer full\n\r"); TRACE_ERROR("USART buffer full\r\n");
} else { } else {
rbuf_write(&sniff_buffer, byte); 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 */ /* Ensure an edge on the reset pin cause the interrupt */
if (pPin->id != pin_rst.id || 0 == (pPin->mask & pin_rst.mask)) { 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; return;
} }
/* Update the ISO state according to the reset change (reset is active low) */ /* 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 */ /* Called during USB enumeration after device is enumerated by host */
void Sniffer_configure(void) void Sniffer_configure(void)
{ {
TRACE_INFO("Sniffer config\n\r"); TRACE_INFO("Sniffer config\r\n");
} }
/* called when *different* configuration is set by host */ /* called when *different* configuration is set by host */
void Sniffer_exit(void) void Sniffer_exit(void)
{ {
TRACE_INFO("Sniffer exit\n\r"); TRACE_INFO("Sniffer exit\r\n");
/* Disable USART */ /* Disable USART */
USART_DisableIt(sniff_usart.base, US_IER_RXRDY); USART_DisableIt(sniff_usart.base, US_IER_RXRDY);
/* NOTE: don't forget to set the IRQ according to the USART peripheral used */ /* 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 */ /* called when *Sniffer* configuration is set by host */
void Sniffer_init(void) 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 */ /* Configure pins to sniff communication between phone and card */
PIO_Configure(pins_sniff, PIO_LISTSIZE(pins_sniff)); 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) { 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 */ /* Send message over USB */
@@ -1032,7 +1028,7 @@ void Sniffer_run(void)
process_byte_pps(byte); process_byte_pps(byte);
break; break;
default: 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) { if (ISO7816_S_RESET != iso_state) {
change_state(ISO7816_S_RESET); change_state(ISO7816_S_RESET);
printf("reset asserted\n\r"); printf("reset asserted\r\n");
} }
} }
if (change_flags & SNIFF_CHANGE_FLAG_RESET_DEASSERT) { if (change_flags & SNIFF_CHANGE_FLAG_RESET_DEASSERT) {
if (ISO7816_S_WAIT_ATR != iso_state) { if (ISO7816_S_WAIT_ATR != iso_state) {
change_state(ISO7816_S_WAIT_ATR); 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) { 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; return rc;
} }
if (rc >= MAX_STRING_SIZE) { 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; return rc;
} }
@@ -469,7 +469,7 @@ signed int vfprintf_sync(FILE *pStream, const char *pFormat, va_list ap)
return rc; return rc;
} }
if (rc >= MAX_STRING_SIZE) { 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; return rc;
} }

View File

@@ -11,10 +11,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 <stdint.h>

View File

@@ -9,10 +9,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 "board.h"
#include "trace.h" #include "trace.h"

View File

@@ -14,10 +14,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

View File

@@ -14,10 +14,6 @@
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * 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 #pragma once

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