Fork for Get Started Demo

Dependencies:   DebouncedInterrupt dash7-alp mbed-rtos mbed wizzi-utils

Fork of D7A_Demo_full by WizziLab

Committer:
Jeej
Date:
Thu Nov 19 17:27:32 2015 +0000
Revision:
2:c3cfaa7d5bb8
Parent:
1:49da0144dd4c
Child:
3:b77b01171cc0
Sending revision test.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:aa25c4c8ddbf 1 #include "mbed.h"
Jeej 0:aa25c4c8ddbf 2 #include "rtos.h"
Jeej 0:aa25c4c8ddbf 3 #include "dbg.h"
Jeej 1:49da0144dd4c 4 #include "shield.h"
Jeej 1:49da0144dd4c 5 #include "alp_serial.h"
Jeej 1:49da0144dd4c 6 #include "alp_device.h"
Jeej 2:c3cfaa7d5bb8 7 #include "alp_file.h"
Jeej 2:c3cfaa7d5bb8 8 #include "alp_report.h"
Jeej 2:c3cfaa7d5bb8 9
Jeej 2:c3cfaa7d5bb8 10 /*
Jeej 2:c3cfaa7d5bb8 11 These data are user defined and will be used by the dash7board
Jeej 2:c3cfaa7d5bb8 12 to identify the device
Jeej 2:c3cfaa7d5bb8 13 */
Jeej 2:c3cfaa7d5bb8 14
Jeej 2:c3cfaa7d5bb8 15 #define __MANUFACTURER_ID__ 0x01234567 // Identify the manufacturer
Jeej 2:c3cfaa7d5bb8 16 #define __DEVICE_ID__ 0x89ABCDEF // Identify the device type
Jeej 2:c3cfaa7d5bb8 17
Jeej 2:c3cfaa7d5bb8 18 #define __FW_ID__ 0x01 // Device type option
Jeej 2:c3cfaa7d5bb8 19
Jeej 2:c3cfaa7d5bb8 20 // Software version
Jeej 2:c3cfaa7d5bb8 21 #define __FW_MAJOR__ 0x02
Jeej 2:c3cfaa7d5bb8 22 #define __FW_MINOR__ 0x03
Jeej 2:c3cfaa7d5bb8 23 #define __FW_PATCH__ 0x0005
Jeej 2:c3cfaa7d5bb8 24 #define __FW_HASH__ 0x86605dba
Jeej 2:c3cfaa7d5bb8 25
Jeej 2:c3cfaa7d5bb8 26 #define __HW_ID__ 0x01520C02 // Hardware ID
Jeej 2:c3cfaa7d5bb8 27
Jeej 2:c3cfaa7d5bb8 28
Jeej 2:c3cfaa7d5bb8 29 revision_t revision = {
Jeej 2:c3cfaa7d5bb8 30 // The two first bytes must be present in all reported files
Jeej 2:c3cfaa7d5bb8 31 // They are parsed by the dash7board
Jeej 2:c3cfaa7d5bb8 32 .nw_stat = 0,
Jeej 2:c3cfaa7d5bb8 33 .nw_seq = 255,
Jeej 2:c3cfaa7d5bb8 34 // These data are parsed to identify the device
Jeej 2:c3cfaa7d5bb8 35 .manufacturer_id = __MANUFACTURER_ID__,
Jeej 2:c3cfaa7d5bb8 36 .device_id = __DEVICE_ID__,
Jeej 2:c3cfaa7d5bb8 37 .fw_version.fw_id = __FW_ID__,
Jeej 2:c3cfaa7d5bb8 38 .fw_version.major = __FW_MAJOR__,
Jeej 2:c3cfaa7d5bb8 39 .fw_version.minor = __FW_MINOR__,
Jeej 2:c3cfaa7d5bb8 40 .fw_version.patch = __FW_PATCH__,
Jeej 2:c3cfaa7d5bb8 41 .fw_version.hash = __FW_HASH__,
Jeej 2:c3cfaa7d5bb8 42 .hw_version = __HW_ID__,
Jeej 2:c3cfaa7d5bb8 43 .fs_crc = 0
Jeej 2:c3cfaa7d5bb8 44 };
Jeej 2:c3cfaa7d5bb8 45
Jeej 2:c3cfaa7d5bb8 46 // Checks the status of the report send.
Jeej 2:c3cfaa7d5bb8 47 void check_status( AlpReport* report, void* param )
Jeej 2:c3cfaa7d5bb8 48 {
Jeej 2:c3cfaa7d5bb8 49 char* message = (char*)param;
Jeej 2:c3cfaa7d5bb8 50 uint8_t status = report->get_status();
Jeej 2:c3cfaa7d5bb8 51 switch (status)
Jeej 2:c3cfaa7d5bb8 52 {
Jeej 2:c3cfaa7d5bb8 53 case ALP_CMD_OK: // message is send and acknowleged
Jeej 2:c3cfaa7d5bb8 54 DPRINT("%s OK\r\n", message);
Jeej 2:c3cfaa7d5bb8 55 break;
Jeej 2:c3cfaa7d5bb8 56 case ALP_CMD_TIMEOUT: // message has not been acknowleged by modem
Jeej 2:c3cfaa7d5bb8 57 DPRINT("%s CMD TIMEOUT\r\n", message);
Jeej 2:c3cfaa7d5bb8 58 break;
Jeej 2:c3cfaa7d5bb8 59 case ALP_CMD_ERROR: // message has been acknowleged by modem but returned an error
Jeej 2:c3cfaa7d5bb8 60 DPRINT("%s CMD ERROR\r\n", message);
Jeej 2:c3cfaa7d5bb8 61 break;
Jeej 2:c3cfaa7d5bb8 62 case ALP_D7_TIMEOUT: // message has not been acknowleged by gateway
Jeej 2:c3cfaa7d5bb8 63 DPRINT("%s D7 TIMEOUT\r\n", message);
Jeej 2:c3cfaa7d5bb8 64 break;
Jeej 2:c3cfaa7d5bb8 65 case ALP_D7_ERROR: // message has been acknowleged by gateway but returned an error
Jeej 2:c3cfaa7d5bb8 66 DPRINT("%s D7 ERROR\r\n", message);
Jeej 2:c3cfaa7d5bb8 67 break;
Jeej 2:c3cfaa7d5bb8 68 default:
Jeej 2:c3cfaa7d5bb8 69 DPRINT("%s UNKNOWN ERROR %d\r\n", message, status);
Jeej 2:c3cfaa7d5bb8 70 break;
Jeej 2:c3cfaa7d5bb8 71 }
Jeej 2:c3cfaa7d5bb8 72 }
Jeej 0:aa25c4c8ddbf 73
Jeej 0:aa25c4c8ddbf 74 int main()
Jeej 0:aa25c4c8ddbf 75 {
Jeej 0:aa25c4c8ddbf 76 // ----- Debug session over USB Serial ----- //
Jeej 0:aa25c4c8ddbf 77 DBG_OPEN();
Jeej 1:49da0144dd4c 78
Jeej 1:49da0144dd4c 79 // Clear some lines on the terminal
Jeej 1:49da0144dd4c 80 DPRINT("\r\n\nBOOT\r\n");
Jeej 0:aa25c4c8ddbf 81
Jeej 1:49da0144dd4c 82 // Declare Shield NRST pin
Jeej 1:49da0144dd4c 83 DigitalOut shield_nrst(PB_0);
Jeej 1:49da0144dd4c 84
Jeej 1:49da0144dd4c 85 // Reset shield
Jeej 1:49da0144dd4c 86 shield_nrst = 0;
Jeej 1:49da0144dd4c 87
Jeej 1:49da0144dd4c 88 // Open ALP port over serial
Jeej 1:49da0144dd4c 89 // This is the physical ALP serial port
Jeej 1:49da0144dd4c 90 AlpSerial serial_shield;
Jeej 1:49da0144dd4c 91
Jeej 1:49da0144dd4c 92 // Initialize ALP device
Jeej 1:49da0144dd4c 93 // This creates an AlpDevice object abstracting the shield1001
Jeej 1:49da0144dd4c 94 // The parameters describe how to access it
Jeej 1:49da0144dd4c 95 AlpDevice shield(&serial_shield, 0, ACCESS_CLASS_EP, ALP_FILE_BLOCK_ISFB, true);
Jeej 1:49da0144dd4c 96
Jeej 1:49da0144dd4c 97 // Release reset
Jeej 1:49da0144dd4c 98 shield_nrst = 1;
Jeej 1:49da0144dd4c 99
Jeej 1:49da0144dd4c 100 // Check the shield boot packets
Jeej 1:49da0144dd4c 101 shield_check_boot(&shield);
Jeej 1:49da0144dd4c 102
Jeej 1:49da0144dd4c 103 // Wait for Shield to notify its files if there is any
Jeej 1:49da0144dd4c 104 Thread::wait(1000);
Jeej 0:aa25c4c8ddbf 105
Jeej 2:c3cfaa7d5bb8 106 // Add the Report file to the file system
Jeej 2:c3cfaa7d5bb8 107 alp_file_add(REVISION_DEVICE_FILE_ID, REVISION_DEVICE_FILE_SIZE, (uint8_t*)&revision);
Jeej 2:c3cfaa7d5bb8 108
Jeej 2:c3cfaa7d5bb8 109 // Create the Revision report
Jeej 2:c3cfaa7d5bb8 110 AlpReport report_revision(&shield, REVISION_DEVICE_FILE_ID);
Jeej 2:c3cfaa7d5bb8 111
Jeej 2:c3cfaa7d5bb8 112 // Attach callback after report is send
Jeej 2:c3cfaa7d5bb8 113 report_revision.attach_after(check_status, (void*)"REPORT REVISION");
Jeej 2:c3cfaa7d5bb8 114
Jeej 2:c3cfaa7d5bb8 115 // Send the Revision report
Jeej 2:c3cfaa7d5bb8 116 DPRINT("SENDING REPORT REVISION\r\n");
Jeej 2:c3cfaa7d5bb8 117 report_revision.send();
Jeej 2:c3cfaa7d5bb8 118
Jeej 0:aa25c4c8ddbf 119 // Set main task to lowest priority
Jeej 0:aa25c4c8ddbf 120 osThreadSetPriority(osThreadGetId(), osPriorityIdle);
Jeej 0:aa25c4c8ddbf 121 while(true)
Jeej 0:aa25c4c8ddbf 122 {
Jeej 0:aa25c4c8ddbf 123 // Wait to avoid beeing stuck in loop
Jeej 0:aa25c4c8ddbf 124 Thread::wait(osWaitForever);
Jeej 0:aa25c4c8ddbf 125 }
Jeej 0:aa25c4c8ddbf 126 }