test firmware for BLE Micro V1.3 1. test io, vcc and ble 2. act as a UART to BLE bridge

Dependencies:   BLE_API Buffer mbed

Fork of BLE_LEDBlinker by Bluetooth Low Energy

Committer:
arch
Date:
Tue Dec 08 08:34:22 2015 +0000
Revision:
12:c4090cb58976
Parent:
11:c8cbc4bc2c17
fix USBTX/USBRX pins config

Who changed what in which revision?

UserRevisionLine numberNew contents of line
arch 11:c8cbc4bc2c17 1
arch 11:c8cbc4bc2c17 2 #include "mbed.h"
arch 11:c8cbc4bc2c17 3
arch 11:c8cbc4bc2c17 4
arch 11:c8cbc4bc2c17 5 extern "C" {
arch 11:c8cbc4bc2c17 6 #include "pstorage.h"
arch 11:c8cbc4bc2c17 7 #include "nrf_error.h"
arch 11:c8cbc4bc2c17 8 }
arch 11:c8cbc4bc2c17 9
arch 11:c8cbc4bc2c17 10 pstorage_handle_t flash_handle;
arch 11:c8cbc4bc2c17 11 pstorage_handle_t block_handle;
arch 11:c8cbc4bc2c17 12 const uint32_t test_passed_code = 0xC0FFEE;
arch 11:c8cbc4bc2c17 13
arch 11:c8cbc4bc2c17 14 volatile uint8_t pstorage_wait_flag = 0;
arch 11:c8cbc4bc2c17 15 static pstorage_block_t pstorage_wait_handle = 0;
arch 11:c8cbc4bc2c17 16
arch 11:c8cbc4bc2c17 17 static void flash_cb_handler(pstorage_handle_t * handle,
arch 11:c8cbc4bc2c17 18 uint8_t op_code,
arch 11:c8cbc4bc2c17 19 uint32_t result,
arch 11:c8cbc4bc2c17 20 uint8_t * p_data,
arch 11:c8cbc4bc2c17 21 uint32_t data_len)
arch 11:c8cbc4bc2c17 22 {
arch 11:c8cbc4bc2c17 23 if(handle->block_id == pstorage_wait_handle) {
arch 11:c8cbc4bc2c17 24 pstorage_wait_flag = 0; //If we are waiting for this callback, clear the wait flag.
arch 11:c8cbc4bc2c17 25 }
arch 11:c8cbc4bc2c17 26 }
arch 11:c8cbc4bc2c17 27
arch 11:c8cbc4bc2c17 28 int test_is_passed(void)
arch 11:c8cbc4bc2c17 29 {
arch 11:c8cbc4bc2c17 30 pstorage_module_param_t param;
arch 11:c8cbc4bc2c17 31 uint32_t retval;
arch 11:c8cbc4bc2c17 32 uint32_t present;
arch 11:c8cbc4bc2c17 33
arch 11:c8cbc4bc2c17 34 retval = pstorage_init();
arch 11:c8cbc4bc2c17 35 if(retval != NRF_SUCCESS) {
arch 11:c8cbc4bc2c17 36 return 0;
arch 11:c8cbc4bc2c17 37 }
arch 11:c8cbc4bc2c17 38
arch 11:c8cbc4bc2c17 39 param.block_size = 32; //Select block size of 32 bytes
arch 11:c8cbc4bc2c17 40 param.block_count = 8; //Select 8 blocks, total of 256 bytes
arch 11:c8cbc4bc2c17 41 param.cb = flash_cb_handler; //Set the pstorage callback handler
arch 11:c8cbc4bc2c17 42
arch 11:c8cbc4bc2c17 43 retval = pstorage_register(&param, &flash_handle);
arch 11:c8cbc4bc2c17 44 if (retval != NRF_SUCCESS) {
arch 11:c8cbc4bc2c17 45 return 0;
arch 11:c8cbc4bc2c17 46 }
arch 11:c8cbc4bc2c17 47
arch 11:c8cbc4bc2c17 48 //Get block identifiers
arch 11:c8cbc4bc2c17 49 pstorage_block_identifier_get(&flash_handle, 0, &block_handle);
arch 11:c8cbc4bc2c17 50
arch 11:c8cbc4bc2c17 51 retval = pstorage_load((uint8_t *)&present, &block_handle, 4, 0); //Read from flash, only one block is allowed for each pstorage_load command
arch 11:c8cbc4bc2c17 52 if (retval != NRF_SUCCESS) {
arch 11:c8cbc4bc2c17 53 return 0;
arch 11:c8cbc4bc2c17 54 }
arch 11:c8cbc4bc2c17 55
arch 11:c8cbc4bc2c17 56 if (present != test_passed_code) {
arch 11:c8cbc4bc2c17 57 return 0;
arch 11:c8cbc4bc2c17 58 }
arch 11:c8cbc4bc2c17 59
arch 11:c8cbc4bc2c17 60 return 1;
arch 11:c8cbc4bc2c17 61 }
arch 11:c8cbc4bc2c17 62
arch 11:c8cbc4bc2c17 63 int test_save_result(int result)
arch 11:c8cbc4bc2c17 64 {
arch 11:c8cbc4bc2c17 65 if (result == 0) {
arch 11:c8cbc4bc2c17 66 uint32_t retval;
arch 11:c8cbc4bc2c17 67 pstorage_wait_handle = block_handle.block_id; //Specify which pstorage handle to wait for
arch 11:c8cbc4bc2c17 68 pstorage_wait_flag = 1; //Set the wait flag. Cleared in the example_cb_handler
arch 11:c8cbc4bc2c17 69
arch 11:c8cbc4bc2c17 70 //Store data to three blocks. Wait for the last store operation to finish before reading out the data.
arch 11:c8cbc4bc2c17 71 retval = pstorage_store(&block_handle, (uint8_t *)&test_passed_code, 4, 0); //Write to flash, only one block is allowed for each pstorage_store command
arch 11:c8cbc4bc2c17 72 if (retval != NRF_SUCCESS) {
arch 11:c8cbc4bc2c17 73 return -1;
arch 11:c8cbc4bc2c17 74 }
arch 11:c8cbc4bc2c17 75
arch 11:c8cbc4bc2c17 76 // while(pstorage_wait_flag) { } // until store operation is finished.
arch 11:c8cbc4bc2c17 77 }
arch 11:c8cbc4bc2c17 78
arch 11:c8cbc4bc2c17 79 return 0;
arch 11:c8cbc4bc2c17 80 }
arch 11:c8cbc4bc2c17 81
arch 11:c8cbc4bc2c17 82
arch 11:c8cbc4bc2c17 83 int test_check_io()
arch 11:c8cbc4bc2c17 84 {
arch 11:c8cbc4bc2c17 85 // 10x2 pins
arch 11:c8cbc4bc2c17 86 const uint32_t mask = ((uint32_t)1 << 11) - 1;
arch 11:c8cbc4bc2c17 87 BusInOut group1(p18, p17, p23, p24, p0, p2, p3, p4, p9, p10);
arch 11:c8cbc4bc2c17 88 BusInOut group2(p25, p28, p29, p30, p5, p6, p7, p8, p12, p13);
arch 11:c8cbc4bc2c17 89
arch 11:c8cbc4bc2c17 90 group1.input();
arch 11:c8cbc4bc2c17 91 group2.output();
arch 12:c4090cb58976 92
arch 12:c4090cb58976 93
arch 12:c4090cb58976 94 for (int i = 0; i < 10; i++) {
arch 12:c4090cb58976 95 uint32_t out = 1 << i;
arch 12:c4090cb58976 96 group2.write(out);
arch 12:c4090cb58976 97 if ((group1.read() & mask) != out) {
arch 12:c4090cb58976 98 return -1;
arch 12:c4090cb58976 99 }
arch 11:c8cbc4bc2c17 100 }
arch 11:c8cbc4bc2c17 101
arch 11:c8cbc4bc2c17 102 group2.input();
arch 11:c8cbc4bc2c17 103 group1.output();
arch 11:c8cbc4bc2c17 104
arch 12:c4090cb58976 105 for (int i = 0; i < 10; i++) {
arch 12:c4090cb58976 106 uint32_t out = 1 << i;
arch 12:c4090cb58976 107 group1.write(out);
arch 12:c4090cb58976 108 if ((group2.read() & mask) != out) {
arch 12:c4090cb58976 109 return -1;
arch 12:c4090cb58976 110 }
arch 11:c8cbc4bc2c17 111 }
arch 11:c8cbc4bc2c17 112
arch 11:c8cbc4bc2c17 113 group1.input();
arch 11:c8cbc4bc2c17 114
arch 11:c8cbc4bc2c17 115 return 0;
arch 11:c8cbc4bc2c17 116 }
arch 11:c8cbc4bc2c17 117
arch 11:c8cbc4bc2c17 118 int test_check_vcc()
arch 11:c8cbc4bc2c17 119 {
arch 11:c8cbc4bc2c17 120 AnalogIn vcc(p1);
arch 11:c8cbc4bc2c17 121 float sum = 0;
arch 11:c8cbc4bc2c17 122
arch 11:c8cbc4bc2c17 123 for (int i = 0; i < 3; i++) {
arch 11:c8cbc4bc2c17 124 sum += vcc.read();
arch 11:c8cbc4bc2c17 125 }
arch 11:c8cbc4bc2c17 126
arch 12:c4090cb58976 127 float val = ((sum / 3.0) * 3.3);
arch 12:c4090cb58976 128 if (val < 2.65 || val > 2.95) { // 2.8V
arch 11:c8cbc4bc2c17 129 return -1;
arch 11:c8cbc4bc2c17 130 }
arch 11:c8cbc4bc2c17 131
arch 11:c8cbc4bc2c17 132 return 0;
arch 11:c8cbc4bc2c17 133 }
arch 11:c8cbc4bc2c17 134
arch 11:c8cbc4bc2c17 135 void test_output_result(int result)
arch 11:c8cbc4bc2c17 136 {
arch 11:c8cbc4bc2c17 137 const uint32_t periods[] = {160, 120, 80, 40};
arch 11:c8cbc4bc2c17 138 PwmOut wave(p11);
arch 11:c8cbc4bc2c17 139
arch 11:c8cbc4bc2c17 140 wave.period_ms(periods[result]);
arch 11:c8cbc4bc2c17 141 wave = 0.5;
arch 11:c8cbc4bc2c17 142
arch 11:c8cbc4bc2c17 143 }
arch 11:c8cbc4bc2c17 144