mirror of
https://github.com/openmv/openmv.git
synced 2025-11-04 14:49:50 +08:00
commit
0413d4bbd2
@ -12,6 +12,9 @@
|
|||||||
// Enable flood_fill()
|
// Enable flood_fill()
|
||||||
//#define IMLIB_ENABLE_FLOOD_FILL
|
//#define IMLIB_ENABLE_FLOOD_FILL
|
||||||
|
|
||||||
|
// Enable mean()
|
||||||
|
//#define IMLIB_ENABLE_MEAN
|
||||||
|
|
||||||
// Enable median()
|
// Enable median()
|
||||||
//#define IMLIB_ENABLE_MEDIAN
|
//#define IMLIB_ENABLE_MEDIAN
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,9 @@
|
|||||||
// Enable flood_fill()
|
// Enable flood_fill()
|
||||||
#define IMLIB_ENABLE_FLOOD_FILL
|
#define IMLIB_ENABLE_FLOOD_FILL
|
||||||
|
|
||||||
|
// Enable mean()
|
||||||
|
#define IMLIB_ENABLE_MEAN
|
||||||
|
|
||||||
// Enable median()
|
// Enable median()
|
||||||
#define IMLIB_ENABLE_MEDIAN
|
#define IMLIB_ENABLE_MEDIAN
|
||||||
|
|
||||||
|
|||||||
@ -15,6 +15,9 @@
|
|||||||
// Enable flood_fill()
|
// Enable flood_fill()
|
||||||
#define IMLIB_ENABLE_FLOOD_FILL
|
#define IMLIB_ENABLE_FLOOD_FILL
|
||||||
|
|
||||||
|
// Enable mean()
|
||||||
|
#define IMLIB_ENABLE_MEAN
|
||||||
|
|
||||||
// Enable median()
|
// Enable median()
|
||||||
#define IMLIB_ENABLE_MEDIAN
|
#define IMLIB_ENABLE_MEDIAN
|
||||||
|
|
||||||
|
|||||||
@ -112,6 +112,7 @@ void imlib_histeq(image_t *img, image_t *mask)
|
|||||||
// ...
|
// ...
|
||||||
// ksize == n -> ((n*2)+1)x((n*2)+1) kernel
|
// ksize == n -> ((n*2)+1)x((n*2)+1) kernel
|
||||||
|
|
||||||
|
#ifdef IMLIB_ENABLE_MEAN
|
||||||
void imlib_mean_filter(image_t *img, const int ksize, bool threshold, int offset, bool invert, image_t *mask)
|
void imlib_mean_filter(image_t *img, const int ksize, bool threshold, int offset, bool invert, image_t *mask)
|
||||||
{
|
{
|
||||||
int brows = ksize + 1;
|
int brows = ksize + 1;
|
||||||
@ -298,6 +299,7 @@ void imlib_mean_filter(image_t *img, const int ksize, bool threshold, int offset
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif // IMLIB_ENABLE_MEAN
|
||||||
|
|
||||||
#ifdef IMLIB_ENABLE_MEDIAN
|
#ifdef IMLIB_ENABLE_MEDIAN
|
||||||
void imlib_median_filter(image_t *img, const int ksize, float percentile, bool threshold, int offset, bool invert, image_t *mask)
|
void imlib_median_filter(image_t *img, const int ksize, float percentile, bool threshold, int offset, bool invert, image_t *mask)
|
||||||
|
|||||||
@ -300,14 +300,24 @@ int ini_handler_callback(void *user, const char *section, const char *name, cons
|
|||||||
openmv_config->wifidbg = ini_is_true(value);
|
openmv_config->wifidbg = ini_is_true(value);
|
||||||
} else if (MATCH("WiFiConfig", "Mode")) {
|
} else if (MATCH("WiFiConfig", "Mode")) {
|
||||||
openmv_config->wifidbg_config.mode = ini_atoi(value);
|
openmv_config->wifidbg_config.mode = ini_atoi(value);
|
||||||
} else if (MATCH("WiFiConfig", "SSID")) {
|
} else if (MATCH("WiFiConfig", "ClientSSID")) {
|
||||||
strncpy(openmv_config->wifidbg_config.ssid, value, WINC_MAX_SSID_LEN);
|
strncpy(openmv_config->wifidbg_config.client_ssid, value, WINC_MAX_SSID_LEN);
|
||||||
} else if (MATCH("WiFiConfig", "Key")) {
|
} else if (MATCH("WiFiConfig", "ClientKey")) {
|
||||||
strncpy(openmv_config->wifidbg_config.key, value, WINC_MAX_PSK_LEN);
|
strncpy(openmv_config->wifidbg_config.client_key, value, WINC_MAX_PSK_LEN);
|
||||||
} else if (MATCH("WiFiConfig", "Security")) {
|
} else if (MATCH("WiFiConfig", "ClientSecurity")) {
|
||||||
openmv_config->wifidbg_config.security = ini_atoi(value);
|
openmv_config->wifidbg_config.client_security = ini_atoi(value);
|
||||||
} else if (MATCH("WiFiConfig", "Channel")) {
|
} else if (MATCH("WiFiConfig", "ClientChannel")) {
|
||||||
openmv_config->wifidbg_config.channel = ini_atoi(value);
|
openmv_config->wifidbg_config.client_channel = ini_atoi(value);
|
||||||
|
} else if (MATCH("WiFiConfig", "AccessPointSSID")) {
|
||||||
|
strncpy(openmv_config->wifidbg_config.access_point_ssid, value, WINC_MAX_SSID_LEN);
|
||||||
|
} else if (MATCH("WiFiConfig", "AccessPointKey")) {
|
||||||
|
strncpy(openmv_config->wifidbg_config.access_point_key, value, WINC_MAX_PSK_LEN);
|
||||||
|
} else if (MATCH("WiFiConfig", "AccessPointSecurity")) {
|
||||||
|
openmv_config->wifidbg_config.access_point_security = ini_atoi(value);
|
||||||
|
} else if (MATCH("WiFiConfig", "AccessPointChannel")) {
|
||||||
|
openmv_config->wifidbg_config.access_point_channel = ini_atoi(value);
|
||||||
|
} else if (MATCH("WiFiConfig", "BoardName")) {
|
||||||
|
strncpy(openmv_config->wifidbg_config.board_name, value, WINC_MAX_BOARD_NAME_LEN);
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2066,6 +2066,7 @@ static mp_obj_t py_image_histeq(uint n_args, const mp_obj_t *args, mp_map_t *kw_
|
|||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_histeq_obj, 1, py_image_histeq);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_histeq_obj, 1, py_image_histeq);
|
||||||
|
|
||||||
|
#ifdef IMLIB_ENABLE_MEAN
|
||||||
STATIC mp_obj_t py_image_mean(uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
STATIC mp_obj_t py_image_mean(uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
||||||
{
|
{
|
||||||
image_t *arg_img =
|
image_t *arg_img =
|
||||||
@ -2087,6 +2088,7 @@ STATIC mp_obj_t py_image_mean(uint n_args, const mp_obj_t *args, mp_map_t *kw_ar
|
|||||||
return args[0];
|
return args[0];
|
||||||
}
|
}
|
||||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_mean_obj, 2, py_image_mean);
|
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(py_image_mean_obj, 2, py_image_mean);
|
||||||
|
#endif // IMLIB_ENABLE_MEAN
|
||||||
|
|
||||||
#ifdef IMLIB_ENABLE_MEDIAN
|
#ifdef IMLIB_ENABLE_MEDIAN
|
||||||
STATIC mp_obj_t py_image_median(uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
STATIC mp_obj_t py_image_median(uint n_args, const mp_obj_t *args, mp_map_t *kw_args)
|
||||||
@ -5322,7 +5324,11 @@ static const mp_rom_map_elem_t locals_dict_table[] = {
|
|||||||
#endif
|
#endif
|
||||||
/* Filtering Methods */
|
/* Filtering Methods */
|
||||||
{MP_ROM_QSTR(MP_QSTR_histeq), MP_ROM_PTR(&py_image_histeq_obj)},
|
{MP_ROM_QSTR(MP_QSTR_histeq), MP_ROM_PTR(&py_image_histeq_obj)},
|
||||||
|
#ifdef IMLIB_ENABLE_MEAN
|
||||||
{MP_ROM_QSTR(MP_QSTR_mean), MP_ROM_PTR(&py_image_mean_obj)},
|
{MP_ROM_QSTR(MP_QSTR_mean), MP_ROM_PTR(&py_image_mean_obj)},
|
||||||
|
#else
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_mean), MP_ROM_PTR(&py_func_unavailable_obj)},
|
||||||
|
#endif
|
||||||
#ifdef IMLIB_ENABLE_MEDIAN
|
#ifdef IMLIB_ENABLE_MEDIAN
|
||||||
{MP_ROM_QSTR(MP_QSTR_median), MP_ROM_PTR(&py_image_median_obj)},
|
{MP_ROM_QSTR(MP_QSTR_median), MP_ROM_PTR(&py_image_median_obj)},
|
||||||
#else
|
#else
|
||||||
|
|||||||
@ -30,16 +30,23 @@
|
|||||||
#define MIN(x, y) ((x) < (y) ? (x) : (y))
|
#define MIN(x, y) ((x) < (y) ? (x) : (y))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define SERVER_ADDR ((uint8_t [5]){192, 168, 1, 1})
|
#define OPENMVCAM_BROADCAST_ADDR ((uint8_t [5]){255, 255, 255, 255})
|
||||||
#define SERVER_PORT (9000)
|
#define OPENMVCAM_BROADCAST_PORT (0xABD1)
|
||||||
#define BUFFER_SIZE (512)
|
#define SERVER_ADDR ((uint8_t [5]){192, 168, 1, 1})
|
||||||
|
#define SERVER_PORT (9000)
|
||||||
|
#define BUFFER_SIZE (512)
|
||||||
|
|
||||||
|
#define UDPCAST_STRING "%d.%d.%d.%d:%d:%s"
|
||||||
|
#define UDPCAST_STRING_SIZE 4+4+4+4+6+WINC_MAX_BOARD_NAME_LEN+1
|
||||||
|
|
||||||
#define close_all_sockets() \
|
#define close_all_sockets() \
|
||||||
do { \
|
do { \
|
||||||
winc_socket_close(client_fd); \
|
winc_socket_close(client_fd); \
|
||||||
winc_socket_close(server_fd); \
|
winc_socket_close(server_fd); \
|
||||||
|
winc_socket_close(udpbcast_fd); \
|
||||||
client_fd = -1; \
|
client_fd = -1; \
|
||||||
server_fd = -1; \
|
server_fd = -1; \
|
||||||
|
udpbcast_fd = -1; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define close_server_socket() \
|
#define close_server_socket() \
|
||||||
@ -48,25 +55,71 @@
|
|||||||
server_fd = -1; \
|
server_fd = -1; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define close_udpbcast_socket() \
|
||||||
|
do { \
|
||||||
|
winc_socket_close(udpbcast_fd); \
|
||||||
|
udpbcast_fd = -1; \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define TIMEDOUT(x) (x == -ETIMEDOUT || x == SOCK_ERR_TIMEOUT)
|
#define TIMEDOUT(x) (x == -ETIMEDOUT || x == SOCK_ERR_TIMEOUT)
|
||||||
|
|
||||||
static int client_fd = -1;
|
static int client_fd = -1;
|
||||||
static int server_fd = -1;
|
static int server_fd = -1;
|
||||||
|
static int udpbcast_fd = -1;
|
||||||
|
static int udpbcast_time = 0;
|
||||||
|
static uint8_t ip_addr[WINC_IP_ADDR_LEN] = {};
|
||||||
|
static char udpbcast_string[UDPCAST_STRING_SIZE] = {};
|
||||||
|
|
||||||
int wifidbg_init(wifidbg_config_t *config)
|
int wifidbg_init(wifidbg_config_t *config)
|
||||||
{
|
{
|
||||||
client_fd = -1;
|
client_fd = -1;
|
||||||
server_fd = -1;
|
server_fd = -1;
|
||||||
|
udpbcast_fd = -1;
|
||||||
|
|
||||||
// Initialize WiFi in AP mode.
|
if(!config->mode) { // STA Mode
|
||||||
if (winc_init(WINC_MODE_AP) != 0) {
|
|
||||||
return -1;
|
// Initialize WiFi in STA mode.
|
||||||
|
if (winc_init(WINC_MODE_STA) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Connect to network.
|
||||||
|
if (winc_connect(config->client_ssid,
|
||||||
|
config->client_security,
|
||||||
|
config->client_key,
|
||||||
|
config->client_channel) != 0) {
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
winc_ifconfig_t ifconfig;
|
||||||
|
|
||||||
|
if (winc_ifconfig(&ifconfig) < 0) {
|
||||||
|
return -3;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(ip_addr, ifconfig.ip_addr, WINC_IP_ADDR_LEN);
|
||||||
|
|
||||||
|
} else { // AP Mode
|
||||||
|
|
||||||
|
// Initialize WiFi in AP mode.
|
||||||
|
if (winc_init(WINC_MODE_AP) != 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start WiFi in AP mode.
|
||||||
|
if (winc_start_ap(config->access_point_ssid,
|
||||||
|
config->access_point_security,
|
||||||
|
config->access_point_key,
|
||||||
|
config->access_point_channel) != 0) {
|
||||||
|
return -2;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(ip_addr, SERVER_ADDR, WINC_IP_ADDR_LEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start WiFi in AP mode.
|
snprintf(udpbcast_string, UDPCAST_STRING_SIZE, UDPCAST_STRING,
|
||||||
if (winc_start_ap(config->ssid, config->security, config->key, config->channel) != 0) {
|
ip_addr[0], ip_addr[1], ip_addr[2], ip_addr[3],
|
||||||
return -2;
|
SERVER_PORT, config->board_name);
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -77,9 +130,35 @@ void wifidbg_dispatch()
|
|||||||
uint8_t buf[BUFFER_SIZE];
|
uint8_t buf[BUFFER_SIZE];
|
||||||
sockaddr client_sockaddr;
|
sockaddr client_sockaddr;
|
||||||
|
|
||||||
|
if (udpbcast_fd < 0) {
|
||||||
|
// Create broadcast socket
|
||||||
|
MAKE_SOCKADDR(udpbcast_sockaddr, OPENMVCAM_BROADCAST_ADDR, OPENMVCAM_BROADCAST_PORT)
|
||||||
|
|
||||||
|
if ((udpbcast_fd = winc_socket_socket(SOCK_DGRAM)) < 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = winc_socket_bind(udpbcast_fd, &udpbcast_sockaddr)) < 0) {
|
||||||
|
close_udpbcast_socket();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((udpbcast_fd >= 0) && (!(udpbcast_time++ % 100))) {
|
||||||
|
// Create broadcast socket
|
||||||
|
MAKE_SOCKADDR(udpbcast_sockaddr, OPENMVCAM_BROADCAST_ADDR, OPENMVCAM_BROADCAST_PORT)
|
||||||
|
|
||||||
|
if ((ret = winc_socket_sendto(udpbcast_fd,
|
||||||
|
(uint8_t *) udpbcast_string, strlen(udpbcast_string) + 1,
|
||||||
|
&udpbcast_sockaddr, 500)) < 0) {
|
||||||
|
close_udpbcast_socket();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (server_fd < 0) {
|
if (server_fd < 0) {
|
||||||
// Create server socket
|
// Create server socket
|
||||||
MAKE_SOCKADDR(server_sockaddr, SERVER_ADDR, SERVER_PORT)
|
MAKE_SOCKADDR(server_sockaddr, ip_addr, SERVER_PORT)
|
||||||
|
|
||||||
if ((server_fd = winc_socket_socket(SOCK_STREAM)) < 0) {
|
if ((server_fd = winc_socket_socket(SOCK_STREAM)) < 0) {
|
||||||
return;
|
return;
|
||||||
@ -107,7 +186,6 @@ void wifidbg_dispatch()
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((ret = winc_socket_recv(client_fd, buf, 8, 10)) < 0) {
|
if ((ret = winc_socket_recv(client_fd, buf, 8, 10)) < 0) {
|
||||||
|
|||||||
@ -8,12 +8,14 @@
|
|||||||
|
|
||||||
typedef struct wifidbg_config {
|
typedef struct wifidbg_config {
|
||||||
winc_mode_t mode;
|
winc_mode_t mode;
|
||||||
winc_security_t security;
|
winc_security_t client_security, access_point_security;
|
||||||
char key[WINC_MAX_PSK_LEN + 1];
|
char client_key[WINC_MAX_PSK_LEN + 1], access_point_key[WINC_MAX_PSK_LEN + 1];
|
||||||
char ssid[WINC_MAX_SSID_LEN + 1];
|
char client_ssid[WINC_MAX_SSID_LEN + 1], access_point_ssid[WINC_MAX_SSID_LEN + 1];
|
||||||
uint8_t channel;
|
uint8_t client_channel, access_point_channel;
|
||||||
|
char board_name[WINC_MAX_BOARD_NAME_LEN + 1];
|
||||||
} wifidbg_config_t;
|
} wifidbg_config_t;
|
||||||
|
|
||||||
void wifidbg_dispatch();
|
|
||||||
int wifidbg_init(wifidbg_config_t *config);
|
int wifidbg_init(wifidbg_config_t *config);
|
||||||
|
void wifidbg_dispatch();
|
||||||
|
|
||||||
#endif /* __WIFIDBG_H__ */
|
#endif /* __WIFIDBG_H__ */
|
||||||
|
|||||||
@ -9,10 +9,11 @@
|
|||||||
#ifndef __WINC_H__
|
#ifndef __WINC_H__
|
||||||
#define __WINC_H__
|
#define __WINC_H__
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#define WINC_IP_ADDR_LEN (4)
|
#define WINC_IP_ADDR_LEN (4)
|
||||||
#define WINC_MAC_ADDR_LEN (6)
|
#define WINC_MAC_ADDR_LEN (6)
|
||||||
#define WINC_MAX_SSID_LEN (33)
|
#define WINC_MAX_SSID_LEN (33)
|
||||||
#define WINC_MAX_PSK_LEN (65)
|
#define WINC_MAX_PSK_LEN (65)
|
||||||
|
#define WINC_MAX_BOARD_NAME_LEN (33)
|
||||||
|
|
||||||
#define MAKE_SOCKADDR(addr, ip, port) \
|
#define MAKE_SOCKADDR(addr, ip, port) \
|
||||||
struct sockaddr addr; \
|
struct sockaddr addr; \
|
||||||
@ -40,11 +41,11 @@ typedef enum {
|
|||||||
} winc_mode_t;
|
} winc_mode_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
WINC_SEC_INVALID = 0,
|
WINC_SEC_INVALID = 0,
|
||||||
WINC_SEC_OPEN,
|
WINC_SEC_OPEN,
|
||||||
WINC_SEC_WPA_PSK,
|
WINC_SEC_WPA_PSK,
|
||||||
WINC_SEC_WEP,
|
WINC_SEC_WEP,
|
||||||
WINC_SEC_802_1X
|
WINC_SEC_802_1X
|
||||||
} winc_security_t;
|
} winc_security_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -56,23 +57,23 @@ typedef struct {
|
|||||||
} winc_ifconfig_t;
|
} winc_ifconfig_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int8_t rssi;
|
int8_t rssi;
|
||||||
uint8_t security;
|
uint8_t security;
|
||||||
uint8_t channel;
|
uint8_t channel;
|
||||||
uint8_t bssid[6];
|
uint8_t bssid[6];
|
||||||
char ssid[WINC_MAX_SSID_LEN];
|
char ssid[WINC_MAX_SSID_LEN];
|
||||||
} winc_scan_result_t;
|
} winc_scan_result_t;
|
||||||
|
|
||||||
typedef int (*winc_scan_callback_t) (winc_scan_result_t *, void *);
|
typedef int (*winc_scan_callback_t) (winc_scan_result_t *, void *);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
uint8_t fw_major; // Firmware version major number.
|
uint8_t fw_major; // Firmware version major number.
|
||||||
uint8_t fw_minor; // Firmware version minor number.
|
uint8_t fw_minor; // Firmware version minor number.
|
||||||
uint8_t fw_patch; // Firmware version patch number.
|
uint8_t fw_patch; // Firmware version patch number.
|
||||||
uint8_t drv_major; // Driver version major number.
|
uint8_t drv_major; // Driver version major number.
|
||||||
uint8_t drv_minor; // Driver version minor number.
|
uint8_t drv_minor; // Driver version minor number.
|
||||||
uint8_t drv_patch; // Driver version patch number.
|
uint8_t drv_patch; // Driver version patch number.
|
||||||
uint32_t chip_id; // HW revision number (chip ID).
|
uint32_t chip_id; // HW revision number (chip ID).
|
||||||
} winc_fwver_t;
|
} winc_fwver_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -110,4 +111,5 @@ int winc_socket_recv(int fd, uint8_t *buf, uint32_t len, uint32_t timeout);
|
|||||||
int winc_socket_sendto(int fd, const uint8_t *buf, uint32_t len, sockaddr *addr, uint32_t timeout);
|
int winc_socket_sendto(int fd, const uint8_t *buf, uint32_t len, sockaddr *addr, uint32_t timeout);
|
||||||
int winc_socket_recvfrom(int fd, uint8_t *buf, uint32_t len, sockaddr *addr, uint32_t timeout);
|
int winc_socket_recvfrom(int fd, uint8_t *buf, uint32_t len, sockaddr *addr, uint32_t timeout);
|
||||||
int winc_socket_setsockopt(int fd, uint32_t level, uint32_t opt, const void *optval, uint32_t optlen);
|
int winc_socket_setsockopt(int fd, uint32_t level, uint32_t opt, const void *optval, uint32_t optlen);
|
||||||
|
|
||||||
#endif //__WINC_H__
|
#endif //__WINC_H__
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user