revice system service, version string

This commit is contained in:
NIIBE Yutaka
2012-05-31 08:58:08 +09:00
parent 093c98bb0f
commit ab51c5421d
6 changed files with 38 additions and 24 deletions

View File

@@ -1,3 +1,13 @@
2012-05-31 Niibe Yutaka <gniibe@fsij.org>
Version string of system service is now USB string.
* src/sys.h (unique_device_id): Define here, not as system
service.
* src/sys.c (sys_version): Version string for system service.
* src/usb_desc.c (String_Descriptors): Add sys_version.
* src/usb_conf.h (NUM_STRING_DESC): 7 (was: 6).
* src/gnuk.ld.in (.sys.version): New section.
2012-05-30 Niibe Yutaka <gniibe@fsij.org> 2012-05-30 Niibe Yutaka <gniibe@fsij.org>
* src/openpgp.c (CHALLENGE_LEN): New. * src/openpgp.c (CHALLENGE_LEN): New.

View File

@@ -54,6 +54,8 @@ SECTIONS
{ {
_sys = .; _sys = .;
KEEP(*(.vectors)) KEEP(*(.vectors))
. = ALIGN(16);
*(.sys.version)
sys.o(.text) sys.o(.text)
sys.o(.text.*) sys.o(.text.*)
sys.o(.rodata) sys.o(.rodata)

View File

@@ -30,15 +30,6 @@
extern uint8_t __flash_start__, __flash_end__; extern uint8_t __flash_start__, __flash_end__;
static const uint8_t *
unique_device_id (void)
{
/* STM32F103 has 96-bit unique device identifier */
const uint8_t *addr = (const uint8_t *)0x1ffff7e8;
return addr;
}
static void static void
usb_cable_config (int enable) usb_cable_config (int enable)
{ {
@@ -295,7 +286,6 @@ extern uint8_t __ram_end__;
handler vector[] __attribute__ ((section(".vectors"))) = { handler vector[] __attribute__ ((section(".vectors"))) = {
(handler)&__ram_end__, (handler)&__ram_end__,
reset, reset,
(handler)unique_device_id,
(handler)set_led, (handler)set_led,
flash_unlock, flash_unlock,
(handler)flash_program_halfword, (handler)flash_program_halfword,
@@ -308,3 +298,10 @@ handler vector[] __attribute__ ((section(".vectors"))) = {
usb_lld_sys_shutdown, usb_lld_sys_shutdown,
nvic_system_reset, nvic_system_reset,
}; };
const uint8_t sys_version[8] __attribute__((section(".sys.version"))) = {
3*2+2, /* bLength */
0x03, /* bDescriptorType = USB_STRING_DESCRIPTOR_TYPE*/
/* sys version: "1.0" */
'1', 0, '.', 0, '0', 0,
};

View File

@@ -1,18 +1,21 @@
extern const uint8_t sys_version[8];
typedef void (*handler)(void); typedef void (*handler)(void);
extern handler vector[14]; extern handler vector[14];
static inline const uint8_t * static inline const uint8_t *
unique_device_id (void) unique_device_id (void)
{ {
const uint8_t * (*func) (void) = (const uint8_t * (*)(void))vector[2]; /* STM32F103 has 96-bit unique device identifier */
const uint8_t *addr = (const uint8_t *)0x1ffff7e8;
return (*func) (); return addr;
} }
static inline void static inline void
set_led (int on) set_led (int on)
{ {
void (*func) (int) = (void (*)(int))vector[3]; void (*func) (int) = (void (*)(int))vector[2];
return (*func) (on); return (*func) (on);
} }
@@ -20,13 +23,13 @@ set_led (int on)
static inline void static inline void
flash_unlock (void) flash_unlock (void)
{ {
(*vector[4]) (); (*vector[3]) ();
} }
static inline int static inline int
flash_program_halfword (uint32_t addr, uint16_t data) flash_program_halfword (uint32_t addr, uint16_t data)
{ {
int (*func) (uint32_t, uint16_t) = (int (*)(uint32_t, uint16_t))vector[5]; int (*func) (uint32_t, uint16_t) = (int (*)(uint32_t, uint16_t))vector[4];
return (*func) (addr, data); return (*func) (addr, data);
} }
@@ -34,7 +37,7 @@ flash_program_halfword (uint32_t addr, uint16_t data)
static inline int static inline int
flash_erase_page (uint32_t addr) flash_erase_page (uint32_t addr)
{ {
int (*func) (uint32_t) = (int (*)(uint32_t))vector[6]; int (*func) (uint32_t) = (int (*)(uint32_t))vector[5];
return (*func) (addr); return (*func) (addr);
} }
@@ -42,7 +45,7 @@ flash_erase_page (uint32_t addr)
static inline int static inline int
flash_check_blank (const uint8_t *p_start, size_t size) flash_check_blank (const uint8_t *p_start, size_t size)
{ {
int (*func) (const uint8_t *, int) = (int (*)(const uint8_t *, int))vector[7]; int (*func) (const uint8_t *, int) = (int (*)(const uint8_t *, int))vector[6];
return (*func) (p_start, size); return (*func) (p_start, size);
} }
@@ -51,7 +54,7 @@ static inline int
flash_write (uint32_t dst_addr, const uint8_t *src, size_t len) flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
{ {
int (*func) (uint32_t, const uint8_t *, size_t) int (*func) (uint32_t, const uint8_t *, size_t)
= (int (*)(uint32_t, const uint8_t *, size_t))vector[8]; = (int (*)(uint32_t, const uint8_t *, size_t))vector[7];
return (*func) (dst_addr, src, len); return (*func) (dst_addr, src, len);
} }
@@ -59,7 +62,7 @@ flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
static inline int static inline int
flash_protect (void) flash_protect (void)
{ {
int (*func) (void) = (int (*)(void))vector[9]; int (*func) (void) = (int (*)(void))vector[8];
return (*func) (); return (*func) ();
} }
@@ -67,7 +70,7 @@ flash_protect (void)
static inline void __attribute__((noreturn)) static inline void __attribute__((noreturn))
flash_erase_all_and_exec (void (*entry)(void)) flash_erase_all_and_exec (void (*entry)(void))
{ {
void (*func) (void (*)(void)) = (void (*)(void (*)(void)))vector[10]; void (*func) (void (*)(void)) = (void (*)(void (*)(void)))vector[9];
(*func) (entry); (*func) (entry);
for (;;); for (;;);
@@ -76,17 +79,17 @@ flash_erase_all_and_exec (void (*entry)(void))
static inline void static inline void
usb_lld_sys_init (void) usb_lld_sys_init (void)
{ {
(*vector[11]) (); (*vector[10]) ();
} }
static inline void static inline void
usb_lld_sys_shutdown (void) usb_lld_sys_shutdown (void)
{ {
(*vector[12]) (); (*vector[11]) ();
} }
static inline void static inline void
nvic_system_reset (void) nvic_system_reset (void)
{ {
(*vector[13]) (); (*vector[12]) ();
} }

View File

@@ -3,7 +3,7 @@
#ifndef __USB_CONF_H #ifndef __USB_CONF_H
#define __USB_CONF_H #define __USB_CONF_H
#define NUM_STRING_DESC 6 #define NUM_STRING_DESC 7
/* Control pipe */ /* Control pipe */
/* EP0 */ /* EP0 */

View File

@@ -4,6 +4,7 @@
#include "config.h" #include "config.h"
#include "ch.h" #include "ch.h"
#include "sys.h"
#include "usb_lld.h" #include "usb_lld.h"
#include "usb_conf.h" #include "usb_conf.h"
#include "usb-cdc.h" #include "usb-cdc.h"
@@ -283,4 +284,5 @@ const struct Descriptor String_Descriptors[NUM_STRING_DESC] = {
{gnukStringSerial, sizeof (gnukStringSerial)}, {gnukStringSerial, sizeof (gnukStringSerial)},
{gnuk_revision_detail, sizeof (gnuk_revision_detail)}, {gnuk_revision_detail, sizeof (gnuk_revision_detail)},
{gnuk_config_options, sizeof (gnuk_config_options)}, {gnuk_config_options, sizeof (gnuk_config_options)},
{sys_version, sizeof (sys_version)},
}; };