diff options
author | Uros Majstorovic <majstor@majstor.org> | 2022-10-24 19:55:48 +0200 |
---|---|---|
committer | Uros Majstorovic <majstor@majstor.org> | 2022-10-24 19:55:48 +0200 |
commit | d8d94a9c2f13b1a7c6d0c209f9757e3f1f122e0b (patch) | |
tree | 1de91eb78b4898b345d98cbeed096da607c824a2 /fw | |
parent | 30035f2753217507227f21d22e394cf85f7cdbfd (diff) |
added ecp example
Diffstat (limited to 'fw')
-rw-r--r-- | fw/fe310/phone/ecp.c | 182 | ||||
-rw-r--r-- | fw/fe310/phone/ecp.h | 4 |
2 files changed, 186 insertions, 0 deletions
diff --git a/fw/fe310/phone/ecp.c b/fw/fe310/phone/ecp.c new file mode 100644 index 0000000..6ce9c8f --- /dev/null +++ b/fw/fe310/phone/ecp.c @@ -0,0 +1,182 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <string.h> + +#include <eos.h> +#include <soc/i2s.h> +#include <dev/net.h> + +#include <eve/eve.h> +#include <eve/eve_kbd.h> +#include <eve/eve_font.h> + +#include <eve/screen/window.h> +#include <eve/screen/page.h> +#include <eve/screen/form.h> + +#include "app/app.h" +#include "app/status.h" + +#include "sms.h" + +#include <ecp/core.h> +#include <ecp/tr.h> + +#include "ecp.h" + +#define CTYPE_PHONE 0 +#define MTYPE_VOIP 0 +#define MTYPE_TEXT 1 + +static ECPContext ctx; +static ECPSocket sock; +static ECPConnHandler handler; + +int arc4random_alloc(void **rsp, size_t rsp_size, void **rsxp, size_t rsxp_size) { + *rsp = malloc(rsp_size); + *rsxp = malloc(rsxp_size); + + if ((*rsp == NULL) || (*rsxp == NULL)) { + if (*rsp) free(*rsp); + if (*rsp) free(*rsxp); + return -1; + } + return 0; +} + +static void handle_err(ECPConnection *conn, unsigned char mtype, int err) { + printf("ERR: CTYPE:0x%x MTYPE:0x%x ERR:%d\n", conn->type, mtype, err); +} + +static int handle_open(ECPConnection *conn, ECP2Buffer *b) { + APP_LOG(APP_LOG_DEBUG, "CONN OPEN\n"); + + return ECP_OK; +} + +static ssize_t handle_msg(ECPConnection *conn, ecp_seq_t seq, unsigned char mtype, unsigned char *msg, size_t msg_size, ECP2Buffer *b) { + switch (mtype) { + case MTYPE_VOIP: { + eos_i2s_spk_write(msg, msg_size); + break; + } + + case MTYPE_TEXT: { + APP_LOG(APP_LOG_DEBUG, "ECP TEXT:%s\n", msg); + break; + } + + } + + return msg_size; +} + +static ECPConnection *conn_new(ECPSocket *sock, unsigned char type) { + ECPConnection *conn; + + conn = malloc(sizeof(ECPConnection)); + if (conn) ecp_conn_init(conn, sock, type); + return conn; +} + +static void conn_free(ECPConnection *conn) { + if (ecp_conn_is_gc(conn)) free(conn); +} + +void ecp_init(void) { + ECPDHKey key_perma; + int rv; + + rv = ecp_ctx_init(&ctx, handle_err, conn_new, conn_free); + if (rv) { + APP_LOG(APP_LOG_ERR, "CTX INIT ERR:%d\n", rv); + return; + } + + ecp_conn_handler_init(&handler, handle_msg, handle_open, NULL, NULL); + ecp_ctx_set_handler(&ctx, CTYPE_PHONE, &handler); + + rv = ecp_dhkey_gen(&key_perma); + if (rv) { + APP_LOG(APP_LOG_ERR, "DHKEY GEN ERR:%d\n", rv); + return; + } + + rv = ecp_sock_create(&sock, &ctx, &key_perma); + if (rv) { + APP_LOG(APP_LOG_ERR, "SOCK CREATE ERR:%d\n", rv); + return; + } + + rv = ecp_sock_open(&sock, NULL); + if (rv) { + APP_LOG(APP_LOG_ERR, "SOCK OPEN ERR:%d\n", rv); + return; + } + +} + +static void connect(void) { + ECPNode node = { + .key_perma.public = { + 0xf0, 0x30, 0xde, 0xb2, 0x82, 0xe8, 0x7c, 0x87, 0x7d, 0x62, 0x15, 0xc3, 0xd9, 0xfd, 0xe2, 0x25, + 0x6c, 0x02, 0xb0, 0x74, 0x35, 0xb3, 0xd6, 0xc2, 0xed, 0xa9, 0x6b, 0xf9, 0x74, 0x53, 0x36, 0x1c, + }, + .key_perma.valid = 1, + .addr = { + .host = {192,168,1,8}, + .port = 3001, + }, + }; + ECPConnection *conn; + int rv; + + conn = malloc(sizeof(ECPConnection)); + if (conn == NULL) { + APP_LOG(APP_LOG_ERR, "OUT OF MEMORY\n"); + return; + } + + ecp_conn_init(conn, &sock, CTYPE_PHONE); + rv = ecp_conn_open(conn, &node); + if (rv) { + APP_LOG(APP_LOG_ERR, "CONN OPEN ERR:%d\n", rv); + return; + } +} + +int ecp_app(EVEWindow *window, EVEViewStack *stack) { + EVEFormSpec spec[] = { + APP_SPACERW(APP_SCREEN_W,1), + }; + EVEPage *page = eve_form_create(window, stack, spec, APP_SPEC_SIZE(spec), ecp_uievt, ecp_close); + if (page == NULL) { + APP_LOG(APP_LOG_ERR, "OUT OF MEMORY\n"); + return EVE_ERR_NOMEM; + } + + return EVE_OK; +} + +int ecp_uievt(EVEPage *page, uint16_t evt, void *param) { + int ret = 0; + + switch (evt) { + case EVE_UIEVT_GEST_TOUCH: { + connect(); + break; + } + + default: { + ret = eve_form_uievt(page, evt, param); + break; + } + } + + return ret; +} + +void ecp_close(EVEPage *page) { + eve_form_destroy(page); +} diff --git a/fw/fe310/phone/ecp.h b/fw/fe310/phone/ecp.h new file mode 100644 index 0000000..17b1931 --- /dev/null +++ b/fw/fe310/phone/ecp.h @@ -0,0 +1,4 @@ +int ecp_app(EVEWindow *window, EVEViewStack *stack); +int ecp_uievt(EVEPage *page, uint16_t evt, void *param); +void ecp_close(EVEPage *page); +void ecp_init(void);
\ No newline at end of file |