Test Ethernet, SD card and BLE of Arch Link
Dependencies: BLE_API SDFileSystem WIZnet_Library mbed nRF51822
Revision 0:e1d4ac4e1c78, committed 2015-08-05
- Comitter:
- yihui
- Date:
- Wed Aug 05 05:33:52 2015 +0000
- Commit message:
- Initial
Changed in this revision
diff -r 000000000000 -r e1d4ac4e1c78 BLE_API.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/BLE_API.lib Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/Bluetooth-Low-Energy/code/BLE_API/#4cd3b18607ec
diff -r 000000000000 -r e1d4ac4e1c78 SDFileSystem.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SDFileSystem.lib Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/mbed_official/code/SDFileSystem/#7b35d1709458
diff -r 000000000000 -r e1d4ac4e1c78 WIZnet_Library.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WIZnet_Library.lib Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/WIZnet/code/WIZnet_Library/#cb8808b47e69
diff -r 000000000000 -r e1d4ac4e1c78 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,331 @@ +/* +Arch Link Test Program for BLE +Jacky Zhang @ 20150526 +*/ + + +#define TEST_W5500 +#define TEST_SD +//#define TEST_I2C +#define TEST_BLE + + +#include "mbed.h" +#include "BLE.h" +#include "HealthThermometerService.h" +#include "WIZnetInterface.h" +#include "SDFileSystem.h" + +#ifdef TEST_I2C +#include "TSL2561.h" +#endif + +//Arch Link +Serial pc(USBTX, USBRX); +DigitalOut led1(LED1); + +#ifdef TEST_SD +//SD Card +int SD_Test(void); +SDFileSystem sd(SPI_PSELMOSI0, SPI_PSELMISO0, SPI_PSELSCK0, p11, "sd"); // MOSI, MISO, SCK, CS +DirHandle *dir; +FILE *fp; +#endif + +#ifdef TEST_W5500 +//W5500 +#define USE_DHCP 1 +#define LOOPBACKPORT 5000 +int W5500_Test(void); +SPI spi(SPI_PSELMOSI0, SPI_PSELMISO0, SPI_PSELSCK0); // mosi, miso, sclk +WIZnetInterface ethernet(&spi, p24, p17); // spi, cs, reset +int ret; +const unsigned char MAC_Addr[6] = {0x00,0x08,0xDC,0x1C,0xAA,0xCA}; +#endif + +#ifdef TEST_BLE +//BLE +void periodicCallback(void); +void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason); +int BLE_Test(void); +BLEDevice ble; +static volatile bool triggerSensorPolling = false; +const static char DEVICE_NAME[] = "Arch Link Test"; +static const uint16_t uuid16_list[] = {GattService::UUID_HEALTH_THERMOMETER_SERVICE}; +#endif + +#ifdef TEST_I2C +//TSL2561 +int I2C_Test(void); +TSL2561 tsl2561(p5, p6); +#endif + +int main(void) +{ + dir = (DirHandle *)malloc(sizeof(DirHandle)); + + wait(0.2); + pc.baud(115200); + wait(0.2); + pc.printf("hello\r\n"); + +// while(1) +// { +// led1 = 1; +// wait(0.5); +// led1 = 0; +// wait(0.5); +// pc.printf("hello\r\n"); +// } + + + + #ifdef TEST_W5500 + if(W5500_Test() == 0) + { + pc.printf("W5500 tested OK\r\n\r\n"); + } + else + { + pc.printf("W5500 tested NOT OK!\r\n\r\n"); + } + #endif + + #ifdef TEST_SD + if(SD_Test() == 0) + { + pc.printf("SD Card tested OK\r\n\r\n"); + } + else + { + pc.printf("SD Card tested NOT OK!\r\n\r\n"); + } + #endif + + #ifdef TEST_I2C + if(I2C_Test() == 0) + { + pc.printf("I2C tested OK\r\n\r\n"); + } + else + { + pc.printf("I2C tested NOT OK!\r\n\r\n"); + } + #endif + + #ifdef TEST_BLE + BLE_Test(); + #endif + + while (true) + { + wait(0.5); + } +} + +#ifdef TEST_SD +int SD_Test(void) +{ + int result; + + pc.printf("checking SD Card...\r\n"); + result = sd.disk_initialize(); + if(result != 0) + { + pc.printf("SD Card initialized failed...\r\n"); + return -1; + } + else + { + pc.printf("SD Card initialized OK\r\n"); + } + + uint64_t sectors = sd.disk_sectors(); + unsigned int capacity = sectors / 2 / 1024; + pc.printf("SD card capacity is: %dMB\r\n", capacity); + + dir = opendir("/sd/testdir"); + if(dir == NULL) + { + pc.printf("the folder is not exist, let us create one\r\n"); + result = mkdir("/sd/testdir", 0777); + if(result != 0) + { + pc.printf("mkdir WRONG, %d\r\n", result); + return -3; + } + pc.printf("the folder was created\r\n"); + } + + pc.printf("open file: sdtest.txt\r\n"); + //w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件 + //a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) + fp = fopen("/sd/testdir/sdtest.txt", "w+"); + pc.printf("opened\r\n"); + if(fp == NULL) + { + pc.printf("Could not open file for write\r\n"); + return -2; + } + + int num = fprintf(fp, "Hello fun SD Card World!\r\n"); + if(num != strlen("Hello fun SD Card World!\r\n")) + { + pc.printf("can't write into sdtested.txt\r\n"); + //fclose(fp); + //free(dir); + return -4; + } + pc.printf("%d characters was wrote into sdtested.txt\r\n", num); + + //fclose(fp); + //free(dir); + + return 0; +} + +#endif + +#ifdef TEST_W5500 +int W5500_Test(void) +{ + mbed_mac_address((char *)MAC_Addr); //Use mbed mac addres + wait(1); + pc.printf("Start to test ethernet!\r\n"); + + #if USE_DHCP + pc.printf("use DHCP\r\n"); + ret = ethernet.init((unsigned char *)MAC_Addr); + #else + pc.printf("do NOT use DHCP\r\n"); + int ret = ethernet.init(MAC_Addr,IP_Addr,IP_Subnet,IP_Gateway); + #endif + + if (!ret) { + pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); + ret = ethernet.connect(); + if (!ret) { + pc.printf("IP: %s, MASK: %s, GW: %s\r\n", + ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); + return 0; + } else { + pc.printf("Error ethernet.connect() - ret = %d\r\n", ret); + //exit(0); + return -1; + } + } else { + pc.printf("Error ethernet.init() - ret = %d\r\n", ret); + //exit(0); + return -1; + } + /* + TCPSocketServer server; + server.bind(LOOPBACKPORT); + server.listen(); + + while (1) { + pc.printf("\nWait for new connection...\r\n"); + TCPSocketConnection client; + server.accept(client); + client.set_blocking(false, 0); // Timeout=0. + pc.printf("Connection from: %s\r\n", client.get_address()); + while (client.is_connected() == true) { + int n = client.receive(buffer, sizeof(buffer)); + if(n > 0) + client.send_all(buffer, n); + if(client.is_fin_received()) + client.close(); + } + pc.printf("Disconnected.\r\n"); + }*/ +} +#endif + +#ifdef TEST_I2C +int I2C_Test(void) +{ + uint16_t light_sensor_id = 0; + + light_sensor_id = tsl2561.read_ID(); + pc.printf("check id: %d\r\n", light_sensor_id); + if(light_sensor_id != 0) + { + for(int i = 0; i < 10; i++) + { + pc.printf("lux = %f\r\n", tsl2561.lux()); + wait(0.2); + } + return 0; + } + else + { + return -1; + } +} +#endif + +#ifdef TEST_BLE +/* Restart Advertising on disconnection*/ +void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason) +{ + ble.startAdvertising(); +} + +void periodicCallback(void) +{ + led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ + + /* Note that the periodicCallback() executes in interrupt context, so it is safer to do + * heavy-weight sensor polling from the main thread. */ + triggerSensorPolling = true; +} + +int BLE_Test(void) +{ + pc.printf("begin to test BLE\r\n"); + + Ticker ticker; + ticker.attach(periodicCallback, 1); + + ble.init(); + ble.onDisconnection(disconnectionCallback); +//return 0; + /* Setup primary service. */ + float currentTemperature = 39.6; + HealthThermometerService thermometerService(ble, currentTemperature, HealthThermometerService::LOCATION_EAR); + + /* setup advertising */ + ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list)); + ble.accumulateAdvertisingPayload(GapAdvertisingData::THERMOMETER_EAR); + ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); + ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); + ble.setAdvertisingInterval(1000); /* 1000ms */ + ble.startAdvertising(); + + pc.printf("BLE initialized OK\r\n"); + + while(1) + { + if (triggerSensorPolling && ble.getGapState().connected) { + triggerSensorPolling = false; + + /* Do blocking calls or whatever is necessary for sensor polling. */ + // error = sensor.readData(); + // if (!error) { + // thermometerService.updateTemperature(c); + // } + + /* In our case, we simply update the dummy temperature measurement. */ + currentTemperature += 0.1; + thermometerService.updateTemperature(currentTemperature); + pc.printf("data updated\r\n"); + } else { + ble.waitForEvent(); + } + } + + //return 0; +} +#endif +
diff -r 000000000000 -r e1d4ac4e1c78 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/bad568076d81 \ No newline at end of file
diff -r 000000000000 -r e1d4ac4e1c78 nRF51822.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/nRF51822.lib Wed Aug 05 05:33:52 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/Nordic-Semiconductor/code/nRF51822/#c7adea3c1e37