summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal
diff options
context:
space:
mode:
authorJosef Gajdusek <atx@atx.name>2015-05-03 20:26:08 +0200
committerDamien George <damien.p.george@gmail.com>2015-05-04 11:48:40 +0100
commit04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c (patch)
treeaafdf5cd87c2fc5004644ed46749d0a9f7134183 /stmhal
parent47b9809d231c4359c56316130a76f13de2b907f7 (diff)
downloadmicropython-04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c.tar.gz
micropython-04ee5983feadc6945e324eb54cd9e7f8c1d6aa8c.zip
lib: Move some common mod_network_* functions to lib/netutils.
Diffstat (limited to 'stmhal')
-rw-r--r--stmhal/Makefile2
-rw-r--r--stmhal/modnetwork.c62
-rw-r--r--stmhal/modnetwork.h6
-rw-r--r--stmhal/modnwcc3k.c18
-rw-r--r--stmhal/modnwwiznet5k.c17
-rw-r--r--stmhal/modusocket.c13
6 files changed, 24 insertions, 94 deletions
diff --git a/stmhal/Makefile b/stmhal/Makefile
index 78553f188b..60f05669b2 100644
--- a/stmhal/Makefile
+++ b/stmhal/Makefile
@@ -41,6 +41,7 @@ INC += -I$(HAL_DIR)/inc
INC += -I$(USBDEV_DIR)/core/inc -I$(USBDEV_DIR)/class/inc
#INC += -I$(USBHOST_DIR)
INC += -I../lib/mp-readline
+INC += -I../lib/netutils
CFLAGS_CORTEX_M4 = -mthumb -mtune=cortex-m4 -mabi=aapcs-linux -mcpu=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -fsingle-precision-constant -Wdouble-promotion
CFLAGS = $(INC) -Wall -Wpointer-arith -Werror -ansi -std=gnu99 -nostdlib $(CFLAGS_MOD) $(CFLAGS_CORTEX_M4) $(COPT)
@@ -92,6 +93,7 @@ SRC_LIB = $(addprefix lib/,\
fatfs/ff.c \
fatfs/option/ccsbcs.c \
mp-readline/readline.c \
+ netutils/netutils.c \
)
SRC_C = \
diff --git a/stmhal/modnetwork.c b/stmhal/modnetwork.c
index 4163783e2c..86bf7379bb 100644
--- a/stmhal/modnetwork.c
+++ b/stmhal/modnetwork.c
@@ -90,65 +90,3 @@ const mp_obj_module_t mp_module_network = {
.name = MP_QSTR_network,
.globals = (mp_obj_dict_t*)&mp_module_network_globals,
};
-
-/******************************************************************************/
-// Miscellaneous helpers
-
-void mod_network_convert_ipv4_endianness(uint8_t *ip) {
- uint8_t ip0 = ip[0]; ip[0] = ip[3]; ip[3] = ip0;
- uint8_t ip1 = ip[1]; ip[1] = ip[2]; ip[2] = ip1;
-}
-
-// Takes an address of the form '192.168.0.1' and converts it to network format
-// in out_ip (big endian, so the 192 is the first byte).
-void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip) {
- mp_uint_t addr_len;
- const char *addr_str = mp_obj_str_get_data(addr_in, &addr_len);
- if (addr_len == 0) {
- // special case of no address given
- memset(out_ip, 0, MOD_NETWORK_IPADDR_BUF_SIZE);
- return;
- }
- const char *s = addr_str;
- const char *s_top = addr_str + addr_len;
- for (mp_uint_t i = 0;; i++) {
- mp_uint_t val = 0;
- for (; s < s_top && *s != '.'; s++) {
- val = val * 10 + *s - '0';
- }
- out_ip[i] = val;
- if (i == 3 && s == s_top) {
- return;
- } else if (i < 3 && s < s_top && *s == '.') {
- s++;
- } else {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, "invalid IP address"));
- }
- }
-}
-
-// Takes an address of the form ('192.168.0.1', 8080), returns the port and
-// puts IP in out_ip (which must take at least IPADDR_BUF_SIZE bytes).
-mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip) {
- mp_obj_t *addr_items;
- mp_obj_get_array_fixed_n(addr_in, 2, &addr_items);
- mod_network_parse_ipv4_addr(addr_items[0], out_ip);
- return mp_obj_get_int(addr_items[1]);
-}
-
-// Takes an array with a raw IPv4 address and returns something like '192.168.0.1'.
-mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip) {
- char ip_str[16];
- mp_uint_t ip_len = snprintf(ip_str, 16, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
- return mp_obj_new_str(ip_str, ip_len, false);
-}
-
-// Takes an array with a raw IP address, and a port, and returns a net-address
-// tuple such as ('192.168.0.1', 8080).
-mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port) {
- mp_obj_t tuple[2] = {
- tuple[0] = mod_network_format_ipv4_addr(ip),
- tuple[1] = mp_obj_new_int(port),
- };
- return mp_obj_new_tuple(2, tuple);
-}
diff --git a/stmhal/modnetwork.h b/stmhal/modnetwork.h
index f306f877a5..d3bc5674de 100644
--- a/stmhal/modnetwork.h
+++ b/stmhal/modnetwork.h
@@ -77,9 +77,3 @@ extern const mod_network_nic_type_t mod_network_nic_type_cc3k;
void mod_network_init(void);
void mod_network_register_nic(mp_obj_t nic);
mp_obj_t mod_network_find_nic(const uint8_t *ip);
-
-void mod_network_convert_ipv4_endianness(uint8_t *ip);
-void mod_network_parse_ipv4_addr(mp_obj_t addr_in, uint8_t *out_ip);
-mp_uint_t mod_network_parse_inet_addr(mp_obj_t addr_in, uint8_t *out_ip);
-mp_obj_t mod_network_format_ipv4_addr(uint8_t *ip);
-mp_obj_t mod_network_format_inet_addr(uint8_t *ip, mp_uint_t port);
diff --git a/stmhal/modnwcc3k.c b/stmhal/modnwcc3k.c
index 5236c3bdc1..7dd5fb2cdf 100644
--- a/stmhal/modnwcc3k.c
+++ b/stmhal/modnwcc3k.c
@@ -36,6 +36,7 @@
#include "py/objlist.h"
#include "py/stream.h"
#include "py/runtime.h"
+#include "netutils.h"
#include "modnetwork.h"
#include "pin.h"
#include "genhdr/pins.h"
@@ -519,13 +520,6 @@ STATIC mp_obj_t cc3k_ifconfig(mp_obj_t self_in) {
tNetappIpconfigRetArgs ipconfig;
netapp_ipconfig(&ipconfig);
- // CC3000 returns little endian, but we want big endian
- mod_network_convert_ipv4_endianness(ipconfig.aucIP);
- mod_network_convert_ipv4_endianness(ipconfig.aucSubnetMask);
- mod_network_convert_ipv4_endianness(ipconfig.aucDefaultGateway);
- mod_network_convert_ipv4_endianness(ipconfig.aucDNSServer);
- mod_network_convert_ipv4_endianness(ipconfig.aucDHCPServer);
-
// render MAC address
VSTR_FIXED(mac_vstr, 18);
const uint8_t *mac = ipconfig.uaMacAddr;
@@ -533,11 +527,11 @@ STATIC mp_obj_t cc3k_ifconfig(mp_obj_t self_in) {
// create and return tuple with ifconfig info
mp_obj_t tuple[7] = {
- mod_network_format_ipv4_addr(ipconfig.aucIP),
- mod_network_format_ipv4_addr(ipconfig.aucSubnetMask),
- mod_network_format_ipv4_addr(ipconfig.aucDefaultGateway),
- mod_network_format_ipv4_addr(ipconfig.aucDNSServer),
- mod_network_format_ipv4_addr(ipconfig.aucDHCPServer),
+ netutils_format_ipv4_addr(ipconfig.aucIP, NETUTILS_LITTLE),
+ netutils_format_ipv4_addr(ipconfig.aucSubnetMask, NETUTILS_LITTLE),
+ netutils_format_ipv4_addr(ipconfig.aucDefaultGateway, NETUTILS_LITTLE),
+ netutils_format_ipv4_addr(ipconfig.aucDNSServer, NETUTILS_LITTLE),
+ netutils_format_ipv4_addr(ipconfig.aucDHCPServer, NETUTILS_LITTLE),
mp_obj_new_str(mac_vstr.buf, mac_vstr.len, false),
mp_obj_new_str((const char*)ipconfig.uaSSID, strlen((const char*)ipconfig.uaSSID), false),
};
diff --git a/stmhal/modnwwiznet5k.c b/stmhal/modnwwiznet5k.c
index 896c4402d8..48d9be170c 100644
--- a/stmhal/modnwwiznet5k.c
+++ b/stmhal/modnwwiznet5k.c
@@ -32,6 +32,7 @@
#include "py/nlr.h"
#include "py/objlist.h"
#include "py/runtime.h"
+#include "netutils.h"
#include "modnetwork.h"
#include "pin.h"
#include "genhdr/pins.h"
@@ -422,20 +423,20 @@ STATIC mp_obj_t wiznet5k_ifconfig(mp_uint_t n_args, const mp_obj_t *args) {
if (n_args == 1) {
// get
mp_obj_t tuple[4] = {
- mod_network_format_ipv4_addr(netinfo.ip),
- mod_network_format_ipv4_addr(netinfo.sn),
- mod_network_format_ipv4_addr(netinfo.gw),
- mod_network_format_ipv4_addr(netinfo.dns),
+ netutils_format_ipv4_addr(netinfo.ip, NETUTILS_BIG),
+ netutils_format_ipv4_addr(netinfo.sn, NETUTILS_BIG),
+ netutils_format_ipv4_addr(netinfo.gw, NETUTILS_BIG),
+ netutils_format_ipv4_addr(netinfo.dns, NETUTILS_BIG),
};
return mp_obj_new_tuple(4, tuple);
} else {
// set
mp_obj_t *items;
mp_obj_get_array_fixed_n(args[1], 4, &items);
- mod_network_parse_ipv4_addr(items[0], netinfo.ip);
- mod_network_parse_ipv4_addr(items[1], netinfo.sn);
- mod_network_parse_ipv4_addr(items[2], netinfo.gw);
- mod_network_parse_ipv4_addr(items[3], netinfo.dns);
+ netutils_parse_ipv4_addr(items[0], netinfo.ip, NETUTILS_BIG);
+ netutils_parse_ipv4_addr(items[1], netinfo.sn, NETUTILS_BIG);
+ netutils_parse_ipv4_addr(items[2], netinfo.gw, NETUTILS_BIG);
+ netutils_parse_ipv4_addr(items[3], netinfo.dns, NETUTILS_BIG);
ctlnetwork(CN_SET_NETINFO, &netinfo);
return mp_const_none;
}
diff --git a/stmhal/modusocket.c b/stmhal/modusocket.c
index a2ec08f59e..4ef614e4ca 100644
--- a/stmhal/modusocket.c
+++ b/stmhal/modusocket.c
@@ -32,6 +32,7 @@
#include "py/objtuple.h"
#include "py/objlist.h"
#include "py/runtime.h"
+#include "netutils.h"
#include "modnetwork.h"
/******************************************************************************/
@@ -93,7 +94,7 @@ STATIC mp_obj_t socket_bind(mp_obj_t self_in, mp_obj_t addr_in) {
// get address
uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE];
- mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
+ mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG);
// check if we need to select a NIC
socket_select_nic(self, ip);
@@ -153,7 +154,7 @@ STATIC mp_obj_t socket_accept(mp_obj_t self_in) {
// make the return value
mp_obj_tuple_t *client = mp_obj_new_tuple(2, NULL);
client->items[0] = socket2;
- client->items[1] = mod_network_format_inet_addr(ip, port);
+ client->items[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
return client;
}
@@ -165,7 +166,7 @@ STATIC mp_obj_t socket_connect(mp_obj_t self_in, mp_obj_t addr_in) {
// get address
uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE];
- mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
+ mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG);
// check if we need to select a NIC
socket_select_nic(self, ip);
@@ -231,7 +232,7 @@ STATIC mp_obj_t socket_sendto(mp_obj_t self_in, mp_obj_t data_in, mp_obj_t addr_
// get address
uint8_t ip[MOD_NETWORK_IPADDR_BUF_SIZE];
- mp_uint_t port = mod_network_parse_inet_addr(addr_in, ip);
+ mp_uint_t port = netutils_parse_inet_addr(addr_in, ip, NETUTILS_BIG);
// check if we need to select a NIC
socket_select_nic(self, ip);
@@ -270,7 +271,7 @@ STATIC mp_obj_t socket_recvfrom(mp_obj_t self_in, mp_obj_t len_in) {
vstr.len = ret;
tuple[0] = mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
}
- tuple[1] = mod_network_format_inet_addr(ip, port);
+ tuple[1] = netutils_format_inet_addr(ip, port, NETUTILS_BIG);
return mp_obj_new_tuple(2, tuple);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_recvfrom_obj, socket_recvfrom);
@@ -404,7 +405,7 @@ STATIC mp_obj_t mod_usocket_getaddrinfo(mp_obj_t host_in, mp_obj_t port_in) {
tuple->items[1] = MP_OBJ_NEW_SMALL_INT(MOD_NETWORK_SOCK_STREAM);
tuple->items[2] = MP_OBJ_NEW_SMALL_INT(0);
tuple->items[3] = MP_OBJ_NEW_QSTR(MP_QSTR_);
- tuple->items[4] = mod_network_format_inet_addr(out_ip, port);
+ tuple->items[4] = netutils_format_inet_addr(out_ip, port, NETUTILS_BIG);
return mp_obj_new_list(1, (mp_obj_t*)&tuple);
}
}