240 lines
7.7 KiB
C
240 lines
7.7 KiB
C
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C"
|
|
{
|
|
#endif
|
|
|
|
#include "app_config.h"
|
|
#include "apply_old_config.h"
|
|
#include "sdk_config.h"
|
|
|
|
#include "nrf_log.h"
|
|
#include "nrf_log_ctrl.h"
|
|
#include "nrf_log_default_backends.h"
|
|
|
|
#include "nrf_delay.h"
|
|
#include "nrf_gpio.h"
|
|
|
|
#include "nrf_sdh.h"
|
|
#include "nrf_sdh_ble.h"
|
|
#include "nrf_sdh_freertos.h"
|
|
|
|
#include "FreeRTOS.h"
|
|
#include "task.h"
|
|
#include "timers.h"
|
|
|
|
#include "led.h"
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#define APP_BLE_CONN_CFG_TAG 1 /**< A tag identifying the SoftDevice BLE configuration. */
|
|
#define APP_BLE_OBSERVER_PRIO 3 /**< Application's BLE observer priority. You shouldn't need to modify this value. */
|
|
|
|
static void le_evt_handler(ble_evt_t const *p_ble_evt, void *p_context)
|
|
{
|
|
ret_code_t err_code;
|
|
switch (p_ble_evt->header.evt_id)
|
|
{
|
|
case BLE_GAP_EVT_PHY_UPDATE:
|
|
NRF_LOG_INFO("PHY update procedure is complete.");
|
|
break;
|
|
case BLE_GAP_EVT_CONN_PARAM_UPDATE:
|
|
NRF_LOG_INFO("Connection parameters updated.");
|
|
break;
|
|
case BLE_GAP_EVT_CONNECTED: {
|
|
NRF_LOG_INFO("Connect to peer.");
|
|
err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_CONN, p_ble_evt->evt.gap_evt.conn_handle, 8);
|
|
APP_ERROR_CHECK(err_code);
|
|
}
|
|
break;
|
|
case BLE_GAP_EVT_DISCONNECTED: {
|
|
NRF_LOG_INFO("Disconnect from peer.");
|
|
err_code = sd_ble_gap_tx_power_set(BLE_GAP_TX_POWER_ROLE_ADV, p_ble_evt->evt.gap_evt.conn_handle, 0);
|
|
APP_ERROR_CHECK(err_code);
|
|
}
|
|
break;
|
|
case BLE_GAP_EVT_PHY_UPDATE_REQUEST: {
|
|
NRF_LOG_INFO("PHY update response. (AUTO)");
|
|
ble_gap_phys_t const phys = {
|
|
.rx_phys = BLE_GAP_PHY_AUTO, // adv&connection: 1M PHY, After connection: mobile-2M, PC-1M
|
|
.tx_phys = BLE_GAP_PHY_AUTO,
|
|
};
|
|
err_code = sd_ble_gap_phy_update(p_ble_evt->evt.gap_evt.conn_handle, &phys);
|
|
APP_ERROR_CHECK(err_code);
|
|
}
|
|
break;
|
|
case BLE_GATTS_EVT_SYS_ATTR_MISSING: {
|
|
ret_code_t err_code = sd_ble_gatts_sys_attr_set(p_ble_evt->evt.gatts_evt.conn_handle, NULL, 0, 0);
|
|
APP_ERROR_CHECK(err_code);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void le_stack_Init(void)
|
|
{
|
|
ret_code_t err_code;
|
|
uint32_t ram_start = 0;
|
|
ble_cfg_t ble_cfg;
|
|
memset(&ble_cfg, 0x00, sizeof(ble_cfg));
|
|
ble_cfg.conn_cfg.conn_cfg_tag = APP_BLE_CONN_CFG_TAG;
|
|
ble_cfg.conn_cfg.params.gatts_conn_cfg.hvn_tx_queue_size = 12;
|
|
|
|
err_code = nrf_sdh_enable_request();
|
|
APP_ERROR_CHECK(err_code);
|
|
|
|
// Configure the BLE stack using the default settings.
|
|
// Fetch the start address of the application RAM.
|
|
err_code = nrf_sdh_ble_default_cfg_set(APP_BLE_CONN_CFG_TAG, &ram_start);
|
|
APP_ERROR_CHECK(err_code);
|
|
|
|
err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATTS, &ble_cfg, ram_start);
|
|
APP_ERROR_CHECK(err_code);
|
|
|
|
// Enable BLE stack.
|
|
err_code = nrf_sdh_ble_enable(&ram_start);
|
|
APP_ERROR_CHECK(err_code);
|
|
|
|
// Register a handler for BLE events.
|
|
NRF_SDH_BLE_OBSERVER(m_ble_observer, APP_BLE_OBSERVER_PRIO, le_evt_handler, NULL);
|
|
}
|
|
|
|
/* edc2.0 pin */
|
|
#define ADCA2_PIN NRF_GPIO_PIN_MAP(0, 25)
|
|
#define ADCA1_PIN NRF_GPIO_PIN_MAP(0, 19)
|
|
#define ADCA0_PIN NRF_GPIO_PIN_MAP(0, 21)
|
|
#define RST_SW_PIN NRF_GPIO_PIN_MAP(0, 17)
|
|
#define CS_SW_PIN NRF_GPIO_PIN_MAP(0, 20)
|
|
#define OFF_PIN NRF_GPIO_PIN_MAP(0, 15)
|
|
#define SHUT_DOWN_PIN NRF_GPIO_PIN_MAP(1, 8)
|
|
#define CS_MEM_PIN NRF_GPIO_PIN_MAP(0, 8)
|
|
#define CS_ADC_PIN NRF_GPIO_PIN_MAP(0, 6)
|
|
#define CS_DAC_PIN NRF_GPIO_PIN_MAP(0, 5)
|
|
#define INT9466_PIN NRF_GPIO_PIN_MAP(0, 27)
|
|
#define Vout_FB_PIN NRF_GPIO_PIN_MAP(0, 26)
|
|
#define Vout_IN_PIN NRF_GPIO_PIN_MAP(0, 4)
|
|
#define LEDTH_PIN NRF_GPIO_PIN_MAP(0, 28)
|
|
#define Iin4_TEST_PIN NRF_GPIO_PIN_MAP(1, 12)
|
|
#define Iin3_SEL_PIN NRF_GPIO_PIN_MAP(1, 14)
|
|
#define VBAT_PIN NRF_GPIO_PIN_MAP(0, 3)
|
|
#define Iin3_PIN NRF_GPIO_PIN_MAP(1, 13)
|
|
#define Iin2_PIN NRF_GPIO_PIN_MAP(1, 3)
|
|
#define Iin1_PIN NRF_GPIO_PIN_MAP(1, 10)
|
|
#define Vin2_PIN NRF_GPIO_PIN_MAP(1, 6)
|
|
#define Vin1_PIN NRF_GPIO_PIN_MAP(1, 11)
|
|
#define POWER_5V_EN_PIN NRF_GPIO_PIN_MAP(0, 24)
|
|
#define POWER_12V_EN_PIN NRF_GPIO_PIN_MAP(0, 23)
|
|
#define CV_CTRL_PIN NRF_GPIO_PIN_MAP(0, 16)
|
|
|
|
void gpio_init(void)
|
|
{
|
|
nrf_gpio_cfg_output(POWER_5V_EN_PIN);
|
|
nrf_gpio_cfg_output(POWER_12V_EN_PIN);
|
|
nrf_gpio_cfg_output(OFF_PIN);
|
|
nrf_gpio_cfg_output(Vout_FB_PIN);
|
|
nrf_gpio_cfg_output(Vout_IN_PIN);
|
|
nrf_gpio_cfg_output(Iin4_TEST_PIN);
|
|
nrf_gpio_cfg_output(Iin3_SEL_PIN);
|
|
nrf_gpio_cfg_output(Iin3_PIN);
|
|
nrf_gpio_cfg_output(Iin2_PIN);
|
|
nrf_gpio_cfg_output(Iin1_PIN);
|
|
nrf_gpio_cfg_output(Vin2_PIN);
|
|
nrf_gpio_cfg_output(Vin1_PIN);
|
|
nrf_gpio_cfg_output(CV_CTRL_PIN);
|
|
nrf_gpio_cfg_output(ADCA2_PIN);
|
|
nrf_gpio_cfg_output(ADCA1_PIN);
|
|
nrf_gpio_cfg_output(ADCA0_PIN);
|
|
nrf_gpio_cfg_output(RST_SW_PIN);
|
|
nrf_gpio_cfg_output(CS_SW_PIN);
|
|
nrf_gpio_cfg_output(CS_MEM_PIN);
|
|
nrf_gpio_cfg_output(CS_ADC_PIN);
|
|
nrf_gpio_cfg_output(CS_DAC_PIN);
|
|
|
|
nrf_gpio_cfg_input(VBAT_PIN, NRF_GPIO_PIN_NOPULL);
|
|
nrf_gpio_cfg_input(SHUT_DOWN_PIN, NRF_GPIO_PIN_NOPULL);
|
|
nrf_gpio_cfg_input(INT9466_PIN, NRF_GPIO_PIN_NOPULL);
|
|
|
|
nrf_gpio_pin_set(POWER_5V_EN_PIN);
|
|
nrf_gpio_pin_set(POWER_12V_EN_PIN);
|
|
nrf_gpio_pin_set(OFF_PIN); //disable 6994
|
|
nrf_gpio_pin_set(CS_SW_PIN);
|
|
nrf_gpio_pin_set(CS_MEM_PIN);
|
|
nrf_gpio_pin_set(CS_ADC_PIN);
|
|
nrf_gpio_pin_set(CS_DAC_PIN);
|
|
|
|
nrf_gpio_pin_clear(Vout_FB_PIN);
|
|
nrf_gpio_pin_clear(Vout_IN_PIN);
|
|
nrf_gpio_pin_clear(Iin4_TEST_PIN);
|
|
nrf_gpio_pin_clear(Iin3_SEL_PIN);
|
|
nrf_gpio_pin_clear(Iin3_PIN);
|
|
nrf_gpio_pin_clear(Iin2_PIN);
|
|
nrf_gpio_pin_clear(Iin1_PIN);
|
|
nrf_gpio_pin_clear(Vin2_PIN);
|
|
nrf_gpio_pin_clear(Vin1_PIN);
|
|
nrf_gpio_pin_clear(CV_CTRL_PIN);
|
|
nrf_gpio_pin_clear(ADCA2_PIN);
|
|
nrf_gpio_pin_clear(ADCA1_PIN);
|
|
nrf_gpio_pin_clear(ADCA0_PIN);
|
|
nrf_gpio_pin_clear(RST_SW_PIN);
|
|
}
|
|
|
|
static void enable_6994_callback(void *pvParameter)
|
|
{
|
|
nrf_gpio_pin_clear(OFF_PIN); //enable 6994
|
|
NRF_LOG_INFO("enable 6994");
|
|
}
|
|
|
|
extern void twi0_init(void);
|
|
extern void spi_init(void);
|
|
int main(void)
|
|
{
|
|
NRF_LOG_INIT(NULL, 0);
|
|
NRF_LOG_DEFAULT_BACKENDS_INIT();
|
|
NRF_LOG_INFO("%s Build: %s %s", ELITE_DEVICE_NAME, __TIME__, __DATE__);
|
|
|
|
twi0_init();
|
|
spi_init();
|
|
gpio_init();
|
|
led_init();
|
|
|
|
NRF_LOG_INFO("LED_GREEN");
|
|
for(int i=0; i<12; i++) {
|
|
led_set(i, LED_GREEN, 1);
|
|
}
|
|
|
|
le_stack_Init(); // enable ble stack, but unscannable!! register "le_evt_handler" handle(CB)
|
|
|
|
extern void le_gap_init(const char *device_name, uint16_t usAppearance);
|
|
le_gap_init(ELITE_DEVICE_NAME, BLE_APPEARANCE_UNKNOWN); // set BT name & connection interval
|
|
|
|
extern void le_gatt_init(void);
|
|
le_gatt_init();
|
|
|
|
extern void le_srv_init(void);
|
|
le_srv_init(); // service
|
|
|
|
extern void le_adv_init(uint8_t ble_conn_cfg_tag);
|
|
le_adv_init(APP_BLE_CONN_CFG_TAG); // could be scanned
|
|
|
|
nrf_sdh_freertos_init(NULL, NULL); // create event: softdevice_task - wireless protocal stack
|
|
|
|
/* Start timer to call enable_6994_callback() */
|
|
TimerHandle_t timer_handle; /**< Reference to counter FreeRTOS timer. */
|
|
timer_handle = xTimerCreate("enable 6994", 1000, pdFALSE, NULL, enable_6994_callback); //1000ms no repeat
|
|
xTimerStart(timer_handle, 0);
|
|
|
|
vTaskStartScheduler();
|
|
|
|
for (;;)
|
|
{
|
|
// Will not get here unless there is insufficient RAM.
|
|
__BKPT(255);
|
|
}
|
|
}
|