revice system service, version string
This commit is contained in:
10
ChangeLog
10
ChangeLog
@@ -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.
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
17
src/sys.c
17
src/sys.c
@@ -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,
|
||||||
|
};
|
||||||
|
|||||||
29
src/sys.h
29
src/sys.h
@@ -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]) ();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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)},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user