demo project

Dependencies:   AX-12A Dynamixel mbed iothub_client EthernetInterface NTPClient ConfigFile SDFileSystem iothub_amqp_transport mbed-rtos proton-c-mbed wolfSSL

Committer:
henryrawas
Date:
Thu Feb 04 20:10:33 2016 +0000
Revision:
33:8b9dcbf6d8ec
Parent:
29:2eec3e7d1ef5
update libs

Who changed what in which revision?

UserRevisionLine numberNew contents of line
henryrawas 29:2eec3e7d1ef5 1 // Copyright (c) Microsoft. All rights reserved.
henryrawas 29:2eec3e7d1ef5 2 // Licensed under the MIT license. See LICENSE file in the project root for full license information.
henryrawas 29:2eec3e7d1ef5 3
henryrawas 27:4239713d9690 4 #include "mbed.h"
henryrawas 27:4239713d9690 5 #include "SDFileSystem.h"
henryrawas 27:4239713d9690 6 #include "ConfigFile.h"
henryrawas 27:4239713d9690 7
henryrawas 27:4239713d9690 8 #include "RobotArmCfg.h"
henryrawas 27:4239713d9690 9
henryrawas 27:4239713d9690 10 SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); //MOSI, MISO, SCLK, SSEL
henryrawas 27:4239713d9690 11
henryrawas 27:4239713d9690 12 ConfigFile cfg;
henryrawas 27:4239713d9690 13
henryrawas 27:4239713d9690 14 // connection string filled in from configuration file
henryrawas 27:4239713d9690 15 // if not using input.cfg configuration file specify connection string here
henryrawas 27:4239713d9690 16 // String containing IoT hub Hostname, Device Id & Device Key in the format:
henryrawas 27:4239713d9690 17 // "HostName=<host_name>;DeviceId=<device_id>;SharedAccessKey=<device_key>"
henryrawas 27:4239713d9690 18 char* connectionString = "[device connection string]";
henryrawas 27:4239713d9690 19
henryrawas 27:4239713d9690 20 // specify joints in arm
henryrawas 27:4239713d9690 21 // if not using input.cfg configuration file specify joints here
henryrawas 27:4239713d9690 22 //static NodeCfg ArmJoints[NUMJOINTS] = {
henryrawas 27:4239713d9690 23 // { NT_AX12, 2 },
henryrawas 27:4239713d9690 24 // { NT_AX12, 3 },
henryrawas 27:4239713d9690 25 // { NT_AX12, 4 },
henryrawas 27:4239713d9690 26 // { NT_AX12, 6 },
henryrawas 27:4239713d9690 27 // { NT_AX12, 1 }
henryrawas 27:4239713d9690 28 //};
henryrawas 27:4239713d9690 29
henryrawas 27:4239713d9690 30 // joints array filled in from configuration file
henryrawas 27:4239713d9690 31 NodeCfg ArmJoints[NUMJOINTS];
henryrawas 27:4239713d9690 32
henryrawas 27:4239713d9690 33 // read config values from file input.cfg on SD card
henryrawas 27:4239713d9690 34 // example format of file is
henryrawas 27:4239713d9690 35 // JointType_0=AX12
henryrawas 27:4239713d9690 36 // JointType_1=AX12
henryrawas 27:4239713d9690 37 // JointType_2=AX12
henryrawas 27:4239713d9690 38 // JointType_3=AX12
henryrawas 27:4239713d9690 39 // JointType_4=AX12
henryrawas 27:4239713d9690 40 // JointId_0=2
henryrawas 27:4239713d9690 41 // JointId_1=3
henryrawas 27:4239713d9690 42 // JointId_2=4
henryrawas 27:4239713d9690 43 // JointId_3=6
henryrawas 27:4239713d9690 44 // JointId_4=1
henryrawas 27:4239713d9690 45 // IoTConnection=HostName=[device connection string]
henryrawas 27:4239713d9690 46 //
henryrawas 27:4239713d9690 47 bool ReadConfigValues()
henryrawas 27:4239713d9690 48 {
henryrawas 27:4239713d9690 49 char value[BUFSIZ];
henryrawas 27:4239713d9690 50 bool rc = true;
henryrawas 27:4239713d9690 51
henryrawas 27:4239713d9690 52 printf("Reading config\r\n");
henryrawas 27:4239713d9690 53
henryrawas 27:4239713d9690 54 /* Read a configuration file from a mbed. */
henryrawas 27:4239713d9690 55 if (!cfg.read("/sd/input.cfg")) {
henryrawas 27:4239713d9690 56 // sometimes fails first time. Try again
henryrawas 27:4239713d9690 57 if (!cfg.read("/sd/input.cfg")) {
henryrawas 27:4239713d9690 58 printf("Failure to read a configuration file.\r\n");
henryrawas 27:4239713d9690 59 rc = false;
henryrawas 27:4239713d9690 60 }
henryrawas 27:4239713d9690 61 }
henryrawas 27:4239713d9690 62
henryrawas 27:4239713d9690 63 /* Get configuration values. */
henryrawas 27:4239713d9690 64 if (cfg.getValue("IoTConnection", &value[0], sizeof(value))) {
henryrawas 27:4239713d9690 65 int len = strlen(value) + 1;
henryrawas 27:4239713d9690 66 connectionString = (char*)malloc(len);
henryrawas 27:4239713d9690 67 strcpy(connectionString, value);
henryrawas 27:4239713d9690 68 }
henryrawas 27:4239713d9690 69 else
henryrawas 27:4239713d9690 70 {
henryrawas 27:4239713d9690 71 printf("Failure to read a configuration file value IoTConnection.\r\n");
henryrawas 27:4239713d9690 72 rc = false;
henryrawas 27:4239713d9690 73 }
henryrawas 27:4239713d9690 74
henryrawas 27:4239713d9690 75 for (int ix = 0; ix < NUMJOINTS; ix++)
henryrawas 27:4239713d9690 76 {
henryrawas 27:4239713d9690 77 char key[20];
henryrawas 27:4239713d9690 78
henryrawas 27:4239713d9690 79 sprintf(key, "JointType_%d", ix);
henryrawas 27:4239713d9690 80 if (cfg.getValue(key, &value[0], sizeof(value))) {
henryrawas 27:4239713d9690 81 ArmJoints[ix].JointType = NT_AX12;
henryrawas 27:4239713d9690 82 }
henryrawas 27:4239713d9690 83 else
henryrawas 27:4239713d9690 84 {
henryrawas 27:4239713d9690 85 printf("Failure to read a configuration file value %s.\r\n", key);
henryrawas 27:4239713d9690 86 rc = false;
henryrawas 27:4239713d9690 87 }
henryrawas 27:4239713d9690 88 sprintf(key, "JointId_%d", ix);
henryrawas 27:4239713d9690 89 if (cfg.getValue(key, &value[0], sizeof(value))) {
henryrawas 27:4239713d9690 90 ArmJoints[ix].JointId = atoi(value);
henryrawas 27:4239713d9690 91 }
henryrawas 27:4239713d9690 92 else
henryrawas 27:4239713d9690 93 {
henryrawas 27:4239713d9690 94 printf("Failure to read a configuration file value %s.\r\n", key);
henryrawas 27:4239713d9690 95 rc = false;
henryrawas 27:4239713d9690 96 }
henryrawas 27:4239713d9690 97 }
henryrawas 27:4239713d9690 98
henryrawas 27:4239713d9690 99 return rc;
henryrawas 27:4239713d9690 100 }