EMIR - Ekvitermní mikroprocesorová regulace https://code.google.com/p/emir/ https://code.google.com/p/emir/wiki/DesignV3
Dependencies: ConfigFile DS1307 OneWire SDFileSystem USBDeviceLite mbed-rtos mbed
src/comm.cpp@6:c24057b64a66, 2014-07-30 (annotated)
- Committer:
- alpov
- Date:
- Wed Jul 30 19:03:20 2014 +0000
- Revision:
- 6:c24057b64a66
- Parent:
- 3:ede67e9b60eb
library updates
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alpov | 3:ede67e9b60eb | 1 | #include "mbed.h" |
alpov | 3:ede67e9b60eb | 2 | #include "rtos.h" |
alpov | 3:ede67e9b60eb | 3 | #include "USBSerial.h" |
alpov | 3:ede67e9b60eb | 4 | #include "rtc.h" |
alpov | 3:ede67e9b60eb | 5 | #include "sensor.h" |
alpov | 3:ede67e9b60eb | 6 | #include "comm.h" |
alpov | 3:ede67e9b60eb | 7 | |
alpov | 3:ede67e9b60eb | 8 | void comm_thread(void const *args) |
alpov | 3:ede67e9b60eb | 9 | { |
alpov | 3:ede67e9b60eb | 10 | USBSerial usb(0x1f00, 0x2012, 0x0001, false); |
alpov | 3:ede67e9b60eb | 11 | Timer t; |
alpov | 3:ede67e9b60eb | 12 | char c; |
alpov | 3:ede67e9b60eb | 13 | |
alpov | 3:ede67e9b60eb | 14 | while (1) |
alpov | 3:ede67e9b60eb | 15 | { |
alpov | 3:ede67e9b60eb | 16 | c = usb.getc(); |
alpov | 3:ede67e9b60eb | 17 | |
alpov | 3:ede67e9b60eb | 18 | if (c == 'r') { |
alpov | 3:ede67e9b60eb | 19 | // perform read |
alpov | 3:ede67e9b60eb | 20 | t.reset(); |
alpov | 3:ede67e9b60eb | 21 | t.start(); |
alpov | 3:ede67e9b60eb | 22 | time_t m_time = get_rtc(); |
alpov | 3:ede67e9b60eb | 23 | t.stop(); |
alpov | 3:ede67e9b60eb | 24 | |
alpov | 3:ede67e9b60eb | 25 | struct tm *now; |
alpov | 3:ede67e9b60eb | 26 | now = localtime(&m_time); |
alpov | 3:ede67e9b60eb | 27 | |
alpov | 3:ede67e9b60eb | 28 | usb.printf("Current time is %lu, %02d:%02d:%02d, %d.%d.%04d\n", |
alpov | 3:ede67e9b60eb | 29 | m_time, |
alpov | 3:ede67e9b60eb | 30 | now->tm_hour, now->tm_min, now->tm_sec, |
alpov | 3:ede67e9b60eb | 31 | now->tm_mday, now->tm_mon+1, now->tm_year+1900 |
alpov | 3:ede67e9b60eb | 32 | ); |
alpov | 3:ede67e9b60eb | 33 | usb.printf("Internal datetime format is %s\n", asctime(now)); |
alpov | 3:ede67e9b60eb | 34 | usb.printf("Read complete, elapsed %uus\n", t.read_us()); |
alpov | 3:ede67e9b60eb | 35 | |
alpov | 3:ede67e9b60eb | 36 | } |
alpov | 3:ede67e9b60eb | 37 | else if (c == 'i') { |
alpov | 3:ede67e9b60eb | 38 | // perform read |
alpov | 3:ede67e9b60eb | 39 | time_t m_time = time(NULL); |
alpov | 3:ede67e9b60eb | 40 | |
alpov | 3:ede67e9b60eb | 41 | struct tm *now; |
alpov | 3:ede67e9b60eb | 42 | now = localtime(&m_time); |
alpov | 3:ede67e9b60eb | 43 | |
alpov | 3:ede67e9b60eb | 44 | usb.printf("Internal datetime format is %s\n", asctime(now)); |
alpov | 3:ede67e9b60eb | 45 | } |
alpov | 3:ede67e9b60eb | 46 | else if (c == 'w') { |
alpov | 3:ede67e9b60eb | 47 | // perform write |
alpov | 3:ede67e9b60eb | 48 | int date, month, year, hours, minutes, seconds; |
alpov | 3:ede67e9b60eb | 49 | usb.printf("Enter the date (date 1..31)\n"); usb.scanf("%d", &date); |
alpov | 3:ede67e9b60eb | 50 | usb.printf("Enter the date (month 1..12)\n"); usb.scanf("%d", &month); |
alpov | 3:ede67e9b60eb | 51 | usb.printf("Enter the date (year >2000)\n"); usb.scanf("%d", &year); |
alpov | 3:ede67e9b60eb | 52 | usb.printf("Enter the time (hours 0..23)\n"); usb.scanf("%d", &hours); |
alpov | 3:ede67e9b60eb | 53 | usb.printf("Enter the time (minutes 0..59)\n"); usb.scanf("%d", &minutes); |
alpov | 3:ede67e9b60eb | 54 | usb.printf("Enter the time (seconds 0..59)\n"); usb.scanf("%d", &seconds); |
alpov | 3:ede67e9b60eb | 55 | |
alpov | 3:ede67e9b60eb | 56 | struct tm now = {seconds, minutes, hours, date, month-1, year-1900}; |
alpov | 3:ede67e9b60eb | 57 | time_t m_time = mktime(&now); |
alpov | 3:ede67e9b60eb | 58 | |
alpov | 3:ede67e9b60eb | 59 | t.reset(); |
alpov | 3:ede67e9b60eb | 60 | t.start(); |
alpov | 3:ede67e9b60eb | 61 | bool b = set_rtc(m_time); |
alpov | 3:ede67e9b60eb | 62 | t.stop(); |
alpov | 3:ede67e9b60eb | 63 | |
alpov | 3:ede67e9b60eb | 64 | usb.printf("Write complete (UNIX %lu, result %d), elapsed %uus\n", m_time, b, t.read_us()); |
alpov | 3:ede67e9b60eb | 65 | } |
alpov | 3:ede67e9b60eb | 66 | else if (c == 't') { |
alpov | 3:ede67e9b60eb | 67 | sensor_mutex.lock(); |
alpov | 3:ede67e9b60eb | 68 | for (int j = 0; j < sensor_count; j++) { |
alpov | 3:ede67e9b60eb | 69 | for (int i = 0; i < 8; i++) usb.printf("%.2X", sensor_roms[j][i]); |
alpov | 3:ede67e9b60eb | 70 | usb.printf(": temperature %.2f'C\n", sensor_temps[j] / 100.); |
alpov | 3:ede67e9b60eb | 71 | } |
alpov | 3:ede67e9b60eb | 72 | sensor_mutex.unlock(); |
alpov | 3:ede67e9b60eb | 73 | usb.printf("Done\n"); |
alpov | 3:ede67e9b60eb | 74 | } |
alpov | 3:ede67e9b60eb | 75 | else { |
alpov | 3:ede67e9b60eb | 76 | usb.printf("Syntax error, use {r|i|w|t}\n"); |
alpov | 3:ede67e9b60eb | 77 | } |
alpov | 3:ede67e9b60eb | 78 | |
alpov | 3:ede67e9b60eb | 79 | usb.printf("\n"); |
alpov | 3:ede67e9b60eb | 80 | } |
alpov | 3:ede67e9b60eb | 81 | |
alpov | 3:ede67e9b60eb | 82 | } |
alpov | 3:ede67e9b60eb | 83 |