mirror of
https://github.com/Polprzewodnikowy/SummerCart64.git
synced 2024-11-21 21:49:15 +01:00
[SC64][SW] Added API versioning
This commit is contained in:
parent
46f7b8b794
commit
740114c62f
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
| id | name | arg0 | arg1 | data | response | description |
|
| id | name | arg0 | arg1 | data | response | description |
|
||||||
| --- | ---------------------- | ------------ | ------------ | ---- | ---------------- | --------------------------------------------------- |
|
| --- | ---------------------- | ------------ | ------------ | ---- | ---------------- | --------------------------------------------------- |
|
||||||
| `v` | **VERSION_GET** | --- | --- | --- | api_version | Get command API version |
|
| `v` | **HW_VERSION_GET** | --- | --- | --- | hw_version | Get HW version |
|
||||||
|
| `V` | **API_VERSION_GET** | --- | --- | --- | api_version | Get USB command API version |
|
||||||
| `R` | **STATE_RESET** | --- | --- | --- | --- | Reset entire flashcart state |
|
| `R` | **STATE_RESET** | --- | --- | --- | --- | Reset entire flashcart state |
|
||||||
| `B` | **CIC_PARAMS_SET** | cic_params_0 | cic_params_1 | --- | --- | Set CIC disable/mode/seed/checksum |
|
| `B` | **CIC_PARAMS_SET** | cic_params_0 | cic_params_1 | --- | --- | Set CIC disable/mode/seed/checksum |
|
||||||
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
|
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
|
||||||
|
@ -6,7 +6,8 @@
|
|||||||
|
|
||||||
| id | name | arg0 | arg1 | rsp0 | rsp1 | description |
|
| id | name | arg0 | arg1 | rsp0 | rsp1 | description |
|
||||||
| --- | --------------------- | ---------- | ------------ | ---------------- | -------------- | -------------------------------------------------- |
|
| --- | --------------------- | ---------- | ------------ | ---------------- | -------------- | -------------------------------------------------- |
|
||||||
| `v` | **VERSION_GET** | --- | --- | api_version | --- | Get command API version |
|
| `v` | **HW_VERSION_GET** | --- | --- | hw_version | --- | Get HW version |
|
||||||
|
| `V` | **API_VERSION_GET** | --- | --- | api_version | --- | Get N64 command API version |
|
||||||
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
|
| `c` | **CONFIG_GET** | config_id | --- | --- | current_value | Get config option |
|
||||||
| `C` | **CONFIG_SET** | config_id | new_value | --- | previous_value | Set config option and get previous value |
|
| `C` | **CONFIG_SET** | config_id | new_value | --- | previous_value | Set config option and get previous value |
|
||||||
| `c` | **SETTING_GET** | setting_id | --- | --- | current_value | Get persistent setting option |
|
| `c` | **SETTING_GET** | setting_id | --- | --- | current_value | Get persistent setting option |
|
||||||
|
@ -24,7 +24,8 @@ typedef struct {
|
|||||||
#define SC64_KEY_LOCK (0xFFFFFFFFUL)
|
#define SC64_KEY_LOCK (0xFFFFFFFFUL)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SC64_CMD_VERSION_GET = 'v',
|
SC64_CMD_HW_VERSION_GET = 'v',
|
||||||
|
SC64_CMD_API_VERSION_GET = 'V',
|
||||||
SC64_CMD_CONFIG_GET = 'c',
|
SC64_CMD_CONFIG_GET = 'c',
|
||||||
SC64_CMD_CONFIG_SET = 'C',
|
SC64_CMD_CONFIG_SET = 'C',
|
||||||
SC64_CMD_SETTING_GET = 'a',
|
SC64_CMD_SETTING_GET = 'a',
|
||||||
|
@ -25,6 +25,7 @@ SRC_FILES = \
|
|||||||
timer.c \
|
timer.c \
|
||||||
update.c \
|
update.c \
|
||||||
usb.c \
|
usb.c \
|
||||||
|
version.c \
|
||||||
writeback.c
|
writeback.c
|
||||||
|
|
||||||
include common.mk
|
include common.mk
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "rtc.h"
|
#include "rtc.h"
|
||||||
#include "sd.h"
|
#include "sd.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
|
#include "version.h"
|
||||||
#include "writeback.h"
|
#include "writeback.h"
|
||||||
|
|
||||||
|
|
||||||
@ -464,6 +465,10 @@ void cfg_process (void) {
|
|||||||
args[0] = cfg_get_version();
|
args[0] = cfg_get_version();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
args[0] = version_api(API_N64);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
if (cfg_query(args)) {
|
if (cfg_query(args)) {
|
||||||
cfg_set_error(CFG_ERROR_BAD_CONFIG_ID);
|
cfg_set_error(CFG_ERROR_BAD_CONFIG_ID);
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "rtc.h"
|
#include "rtc.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
#include "usb.h"
|
#include "usb.h"
|
||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
|
||||||
enum rx_state {
|
enum rx_state {
|
||||||
@ -162,6 +163,13 @@ static void usb_rx_process (void) {
|
|||||||
p.response_info.data[0] = cfg_get_version();
|
p.response_info.data[0] = cfg_get_version();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'V':
|
||||||
|
p.rx_state = RX_STATE_IDLE;
|
||||||
|
p.response_pending = true;
|
||||||
|
p.response_info.data_length = 4;
|
||||||
|
p.response_info.data[0] = version_api(API_USB);
|
||||||
|
break;
|
||||||
|
|
||||||
case 'R':
|
case 'R':
|
||||||
cfg_reset_state();
|
cfg_reset_state();
|
||||||
cic_reset_parameters();
|
cic_reset_parameters();
|
||||||
|
17
sw/controller/src/version.c
Normal file
17
sw/controller/src/version.c
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#include "version.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define VERSION_API_USB (1)
|
||||||
|
#define VERSION_API_N64 (1)
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t version_api (version_api_type_t type) {
|
||||||
|
switch (type) {
|
||||||
|
case API_USB:
|
||||||
|
return VERSION_API_USB;
|
||||||
|
case API_N64:
|
||||||
|
return VERSION_API_N64;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
17
sw/controller/src/version.h
Normal file
17
sw/controller/src/version.h
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#ifndef VERSION_H__
|
||||||
|
#define VERSION_H__
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
API_USB,
|
||||||
|
API_N64,
|
||||||
|
} version_api_type_t;
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t version_api (version_api_type_t type);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
@ -319,6 +319,8 @@ class SC64:
|
|||||||
SCREENSHOT = 4
|
SCREENSHOT = 4
|
||||||
GDB = 0xDB
|
GDB = 0xDB
|
||||||
|
|
||||||
|
__MIN_SUPPORTED_API_VERSION = 1
|
||||||
|
|
||||||
__isv_line_buffer: bytes = b''
|
__isv_line_buffer: bytes = b''
|
||||||
__debug_header: Optional[bytes] = None
|
__debug_header: Optional[bytes] = None
|
||||||
__gdb_client: Optional[socket.socket] = None
|
__gdb_client: Optional[socket.socket] = None
|
||||||
@ -327,11 +329,20 @@ class SC64:
|
|||||||
self.__link = SC64Serial()
|
self.__link = SC64Serial()
|
||||||
version = self.__link.execute_cmd(cmd=b'v')
|
version = self.__link.execute_cmd(cmd=b'v')
|
||||||
if (version != b'SCv2'):
|
if (version != b'SCv2'):
|
||||||
raise ConnectionException('Unknown SC64 API version')
|
raise ConnectionException('Unknown SC64 HW version')
|
||||||
|
|
||||||
def __get_int(self, data: bytes) -> int:
|
def __get_int(self, data: bytes) -> int:
|
||||||
return int.from_bytes(data[:4], byteorder='big')
|
return int.from_bytes(data[:4], byteorder='big')
|
||||||
|
|
||||||
|
def check_api_version(self) -> None:
|
||||||
|
try:
|
||||||
|
data = self.__link.execute_cmd(cmd=b'V')
|
||||||
|
except ConnectionException:
|
||||||
|
raise ConnectionException('Outdated SC64 API, please update firmware')
|
||||||
|
version = self.__get_int(data)
|
||||||
|
if (version < self.__MIN_SUPPORTED_API_VERSION):
|
||||||
|
raise ConnectionException('Unsupported SC64 API version, please update firmware')
|
||||||
|
|
||||||
def __set_config(self, config: __CfgId, value: int) -> None:
|
def __set_config(self, config: __CfgId, value: int) -> None:
|
||||||
try:
|
try:
|
||||||
self.__link.execute_cmd(cmd=b'C', args=[config, value])
|
self.__link.execute_cmd(cmd=b'C', args=[config, value])
|
||||||
@ -876,7 +887,9 @@ if __name__ == '__main__':
|
|||||||
status_callback = lambda status: print(f'{status} ', end='', flush=True)
|
status_callback = lambda status: print(f'{status} ', end='', flush=True)
|
||||||
sc64.update_firmware(f.read(), status_callback)
|
sc64.update_firmware(f.read(), status_callback)
|
||||||
print('done')
|
print('done')
|
||||||
|
|
||||||
|
sc64.check_api_version()
|
||||||
|
|
||||||
if (args.update_bootloader):
|
if (args.update_bootloader):
|
||||||
with open(args.update_bootloader, 'rb') as f:
|
with open(args.update_bootloader, 'rb') as f:
|
||||||
print('Uploading Bootloader... ', end='', flush=True)
|
print('Uploading Bootloader... ', end='', flush=True)
|
||||||
|
Loading…
Reference in New Issue
Block a user