Skip to content

Commit

Permalink
session.c: refactor.
Browse files Browse the repository at this point in the history
  • Loading branch information
whitequark committed Aug 8, 2015
1 parent d6ab567 commit ecdebc0
Show file tree
Hide file tree
Showing 10 changed files with 437 additions and 354 deletions.
25 changes: 19 additions & 6 deletions artiq/coredevice/comm_generic.py
Expand Up @@ -122,8 +122,9 @@ def _read_empty(self, ty):

def _read_chunk(self, length):
if self._read_length < length:
raise IOError("Read overrun while trying to read {} bytes ({} remaining)".
format(length, self._read_length))
raise IOError("Read overrun while trying to read {} bytes ({} remaining)"
" in packet {}".
format(length, self._read_length, self._read_type))

self._read_length -= length
return self.read(length)
Expand All @@ -144,6 +145,12 @@ def _read_float64(self):
(value, ) = struct.unpack(">d", self._read_chunk(8))
return value

def _read_bytes(self):
return self._read_chunk(self._read_int32())

def _read_string(self):
return self._read_bytes()[:-1].decode('utf-8')

#
# Writer interface
#
Expand All @@ -170,6 +177,9 @@ def _write_empty(self, ty):
self._write_header(ty)
self._write_flush()

def _write_chunk(self, chunk):
self._write_buffer.append(chunk)

def _write_int8(self, value):
self._write_buffer.append(struct.pack("B", value))

Expand All @@ -182,9 +192,13 @@ def _write_int64(self, value):
def _write_float64(self, value):
self._write_buffer.append(struct.pack(">d", value))

def _write_string(self, value):
def _write_bytes(self, value):
self._write_int32(len(value))
self._write_buffer.append(value)

def _write_string(self, value):
self._write_bytes(value.encode("utf-8") + b"\0")

#
# Exported APIs
#
Expand All @@ -211,7 +225,7 @@ def switch_clock(self, external):

def load(self, kernel_library):
self._write_header(_H2DMsgType.LOAD_LIBRARY)
self._write_string(kernel_library)
self._write_chunk(kernel_library)
self._write_flush()

self._read_empty(_D2HMsgType.LOAD_COMPLETED)
Expand All @@ -232,8 +246,7 @@ def flash_storage_read(self, key):
def flash_storage_write(self, key, value):
self._write_header(_H2DMsgType.FLASH_WRITE_REQUEST)
self._write_string(key)
self._write_string(b"\x00")
self._write_string(value)
self._write_bytes(value)
self._write_flush()

self._read_header()
Expand Down
8 changes: 4 additions & 4 deletions artiq/coredevice/comm_serial.py
Expand Up @@ -28,10 +28,10 @@ def close(self):
del self.port

def read(self, length):
r = bytes()
while len(r) < length:
r += self.port.read(length - len(r))
return r
result = bytes()
while len(result) < length:
result += self.port.read(length - len(result))
return result

def write(self, data):
remaining = len(data)
Expand Down
11 changes: 6 additions & 5 deletions artiq/frontend/artiq_coretool.py
Expand Up @@ -26,19 +26,19 @@ def get_argparser():
# Configuration Read command
p_read = subparsers.add_parser("cfg-read",
help="read key from core device config")
p_read.add_argument("key", type=to_bytes,
p_read.add_argument("key", type=str,
help="key to be read from core device config")

# Configuration Write command
p_write = subparsers.add_parser("cfg-write",
help="write key-value records to core "
"device config")
p_write.add_argument("-s", "--string", nargs=2, action="append",
default=[], metavar=("KEY", "STRING"), type=to_bytes,
default=[], metavar=("KEY", "STRING"), type=str,
help="key-value records to be written to core device "
"config")
p_write.add_argument("-f", "--file", nargs=2, action="append",
type=to_bytes, default=[],
type=str, default=[],
metavar=("KEY", "FILENAME"),
help="key and file whose content to be written to "
"core device config")
Expand All @@ -47,7 +47,7 @@ def get_argparser():
p_delete = subparsers.add_parser("cfg-delete",
help="delete key from core device config")
p_delete.add_argument("key", nargs=argparse.REMAINDER,
default=[], type=to_bytes,
default=[], type=str,
help="key to be deleted from core device config")

# Configuration Erase command
Expand All @@ -61,6 +61,7 @@ def main():
dmgr = DeviceManager(FlatFileDB(args.ddb))
try:
comm = dmgr.get("comm")
comm.check_ident()

if args.action == "log":
print(comm.get_log())
Expand All @@ -72,7 +73,7 @@ def main():
print(value)
elif args.action == "cfg-write":
for key, value in args.string:
comm.flash_storage_write(key, value)
comm.flash_storage_write(key, value.encode('utf-8'))

This comment has been minimized.

Copy link
@sbourdeauducq

sbourdeauducq Aug 8, 2015

Member

"

for key, filename in args.file:
with open(filename, "rb") as fi:
comm.flash_storage_write(key, fi.read())
Expand Down
14 changes: 8 additions & 6 deletions soc/runtime/flash_storage.c
Expand Up @@ -115,7 +115,8 @@ static int is_empty(struct record *record)
return record->value_len == 0;
}

static int key_exists(char *buff, char *key, char *end, char accept_empty, struct record *found_record)
static int key_exists(char *buff, const char *key, char *end, char accept_empty,
struct record *found_record)
{
struct iter_state is;
struct record iter_record;
Expand Down Expand Up @@ -170,7 +171,7 @@ static char check_for_empty_records(char *buff)
return 0;
}

static unsigned int try_to_flush_duplicates(char *new_key, unsigned int buf_len)
static unsigned int try_to_flush_duplicates(const char *new_key, unsigned int buf_len)
{
unsigned int key_size, new_record_size, ret = 0, can_rollback = 0;
struct record record, previous_record;
Expand Down Expand Up @@ -210,7 +211,8 @@ static unsigned int try_to_flush_duplicates(char *new_key, unsigned int buf_len)
return ret;
}

static void write_at_offset(char *key, void *buffer, int buf_len, unsigned int sector_offset)
static void write_at_offset(const char *key, const void *buffer,
int buf_len, unsigned int sector_offset)
{
int key_len = strlen(key) + 1;
unsigned int record_size = key_len + buf_len + sizeof(record_size);
Expand All @@ -223,7 +225,7 @@ static void write_at_offset(char *key, void *buffer, int buf_len, unsigned int s
}


int fs_write(char *key, void *buffer, unsigned int buf_len)
int fs_write(const char *key, const void *buffer, unsigned int buf_len)
{
struct record record;
unsigned int key_size = strlen(key) + 1;
Expand Down Expand Up @@ -269,7 +271,7 @@ void fs_erase(void)
flush_cpu_dcache();
}

unsigned int fs_read(char *key, void *buffer, unsigned int buf_len, unsigned int *remain)
unsigned int fs_read(const char *key, void *buffer, unsigned int buf_len, unsigned int *remain)
{
unsigned int read_length = 0;
struct iter_state is;
Expand All @@ -295,7 +297,7 @@ unsigned int fs_read(char *key, void *buffer, unsigned int buf_len, unsigned int
return read_length;
}

void fs_remove(char *key)
void fs_remove(const char *key)
{
fs_write(key, NULL, 0);
}
Expand Down
6 changes: 3 additions & 3 deletions soc/runtime/flash_storage.h
Expand Up @@ -5,9 +5,9 @@
#ifndef __FLASH_STORAGE_H
#define __FLASH_STORAGE_H

void fs_remove(char *key);
void fs_remove(const char *key);
void fs_erase(void);
int fs_write(char *key, void *buffer, unsigned int buflen);
unsigned int fs_read(char *key, void *buffer, unsigned int buflen, unsigned int *remain);
int fs_write(const char *key, const void *buffer, unsigned int buflen);
unsigned int fs_read(const char *key, void *buffer, unsigned int buflen, unsigned int *remain);

#endif /* __FLASH_STORAGE_H */
2 changes: 1 addition & 1 deletion soc/runtime/ksupport.h
Expand Up @@ -5,7 +5,7 @@ long long int now_init(void);
void now_save(long long int now);
int watchdog_set(int ms);
void watchdog_clear(int id);
int rpc(int rpc_num, ...);
int rpc(int service, ...);
void lognonl(const char *fmt, ...);
void log(const char *fmt, ...);

Expand Down
8 changes: 4 additions & 4 deletions soc/runtime/main.c
Expand Up @@ -189,12 +189,12 @@ static void serial_service(void)

session_poll((void **)&txdata, &txlen);
if(txlen > 0) {
for(i=0;i<txlen;i++)
for(i = 0; i < txlen; i++)
uart_write(txdata[i]);
session_ack_data(txlen);
session_ack_mem(txlen);
} else if(txlen < 0)
session_ack(txlen);
} else if(txlen < 0) {
reset_serial_session(1);
}
}

static void regular_main(void)
Expand Down
3 changes: 1 addition & 2 deletions soc/runtime/net_server.c
Expand Up @@ -89,7 +89,7 @@ static err_t net_server_recv(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err

static err_t net_server_sent(void *arg, struct tcp_pcb *pcb, u16_t len)
{
session_ack_mem(len);
session_ack(len);
return ERR_OK;
}

Expand Down Expand Up @@ -205,7 +205,6 @@ void net_server_service(void)
if(len > sndbuf)
len = sndbuf;
tcp_write(active_pcb, data, len, 0);
session_ack_data(len);
}
if(len < 0)
net_server_close(active_cs, active_pcb);
Expand Down

0 comments on commit ecdebc0

Please sign in to comment.