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

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?

UserRevisionLine numberNew 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