int csp_init(unsigned char address) { int ret; /* Initialize CSP */ csp_set_address(address); ret = csp_conn_init(); if (ret != CSP_ERR_NONE) return ret; ret = csp_port_init(); if (ret != CSP_ERR_NONE) return ret; ret = csp_qfifo_init(); if (ret != CSP_ERR_NONE) return ret; /* Loopback */ csp_iflist_add(&csp_if_lo); /* Register loopback route */ csp_route_set(csp_get_address(), &csp_if_lo, CSP_NODE_MAC); /* Also register loopback as default, until user redefines default route */ csp_route_set(CSP_DEFAULT_ROUTE, &csp_if_lo, CSP_NODE_MAC); return CSP_ERR_NONE; }
int csp_can_init(uint8_t mode, struct csp_can_config *conf) { int ret; uint32_t mask; /* Initialize packet buffer */ if (pbuf_init() != 0) { csp_log_error("Failed to initialize CAN packet buffers"); return CSP_ERR_NOMEM; } /* Initialize CFP identifier */ if (id_init() != 0) { csp_log_error("Failed to initialize CAN identification number"); return CSP_ERR_NOMEM; } if (mode == CSP_CAN_MASKED) { mask = CFP_MAKE_DST((1 << CFP_HOST_SIZE) - 1); } else if (mode == CSP_CAN_PROMISC) { mask = 0; csp_if_can.promisc = 1; } else { csp_log_error("Unknown CAN mode"); return CSP_ERR_INVAL; } can_rx_queue = csp_queue_create(CSP_CAN_RX_QUEUE_SIZE, sizeof(can_frame_t)); if (can_rx_queue == NULL) { csp_log_error("Failed to create CAN RX queue"); return CSP_ERR_NOMEM; } ret = csp_thread_create(csp_can_rx_task, (signed char *) "CAN", 6000/sizeof(int), NULL, 3, &can_rx_task); if (ret != 0) { csp_log_error("Failed to init CAN RX task"); return CSP_ERR_NOMEM; } /* Initialize CAN driver */ if (can_init(CFP_MAKE_DST(my_address), mask, csp_tx_callback, csp_rx_callback, conf) != 0) { csp_log_error("Failed to initialize CAN driver"); return CSP_ERR_DRIVER; } /* Regsiter interface */ csp_iflist_add(&csp_if_can); return CSP_ERR_NONE; }