X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/713670043a1edb714461fc83c2b8817f3db99961..a9abe1fdea5ccf67aaccab6fdde300d6fcf2d15a:/Projects/TempDataLogger/TempDataLogger.c diff --git a/Projects/TempDataLogger/TempDataLogger.c b/Projects/TempDataLogger/TempDataLogger.c index bf5fd3940..258bfc386 100644 --- a/Projects/TempDataLogger/TempDataLogger.c +++ b/Projects/TempDataLogger/TempDataLogger.c @@ -1,21 +1,21 @@ /* LUFA Library - Copyright (C) Dean Camera, 2010. - + Copyright (C) Dean Camera, 2012. + dean [at] fourwalledcubicle [dot] com - www.fourwalledcubicle.com + www.lufa-lib.org */ /* - Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -59,7 +59,7 @@ USB_ClassInfo_MS_Device_t Disk_MS_Interface = }; /** Buffer to hold the previously generated HID report, for comparison purposes inside the HID class driver. */ -uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; +static uint8_t PrevHIDReportBuffer[GENERIC_REPORT_SIZE]; /** LUFA HID Class driver interface configuration and state information. This structure is * passed to all HID Class driver functions, so that multiple instances of the same class @@ -74,26 +74,26 @@ USB_ClassInfo_HID_Device_t Generic_HID_Interface = .ReportINEndpointNumber = GENERIC_IN_EPNUM, .ReportINEndpointSize = GENERIC_EPSIZE, .ReportINEndpointDoubleBank = false, - + .PrevReportINBuffer = PrevHIDReportBuffer, .PrevReportINBufferSize = sizeof(PrevHIDReportBuffer), }, }; /** Non-volatile Logging Interval value in EEPROM, stored as a number of 500ms ticks */ -uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL; +static uint8_t EEMEM LoggingInterval500MS_EEPROM = DEFAULT_LOG_INTERVAL; /** SRAM Logging Interval value fetched from EEPROM, stored as a number of 500ms ticks */ -uint8_t LoggingInterval500MS_SRAM; +static uint8_t LoggingInterval500MS_SRAM; /** Total number of 500ms logging ticks elapsed since the last log value was recorded */ -uint16_t CurrentLoggingTicks; +static uint16_t CurrentLoggingTicks; /** FAT Fs structure to hold the internal state of the FAT driver for the Dataflash contents. */ -FATFS DiskFATState; +static FATFS DiskFATState; /** FAT Fs structure to hold a FAT file handle for the log data write destination. */ -FIL TempLogFile; +static FIL TempLogFile; /** ISR to handle the 500ms ticks for sampling and data logging */ @@ -102,33 +102,32 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK) uint8_t LEDMask = LEDs_GetLEDs(); /* Check to see if the logging interval has expired */ - if (CurrentLoggingTicks++ < LoggingInterval500MS_SRAM) + if (++CurrentLoggingTicks < LoggingInterval500MS_SRAM) return; - + /* Reset log tick counter to prepare for next logging interval */ CurrentLoggingTicks = 0; LEDs_SetAllLEDs(LEDMASK_USB_BUSY); - + /* Only log when not connected to a USB host */ if (USB_DeviceState == DEVICE_STATE_Unattached) { - uint8_t Day, Month, Year; - uint8_t Hour, Minute, Second; - - DS1307_GetDate(&Day, &Month, &Year); - DS1307_GetTime(&Hour, &Minute, &Second); + TimeDate_t CurrentTimeDate; + DS1307_GetTimeDate(&CurrentTimeDate); char LineBuffer[100]; uint16_t BytesWritten; - BytesWritten = sprintf(LineBuffer, "%02d/%02d/20%04d, %02d:%02d:%02d, %d Degrees\r\n", - Day, Month, Year, Hour, Minute, Second, Temperature_GetTemperature()); + BytesWritten = sprintf(LineBuffer, "%02d/%02d/20%02d, %02d:%02d:%02d, %d Degrees\r\n", + CurrentTimeDate.Day, CurrentTimeDate.Month, CurrentTimeDate.Year, + CurrentTimeDate.Hour, CurrentTimeDate.Minute, CurrentTimeDate.Second, + Temperature_GetTemperature()); f_write(&TempLogFile, LineBuffer, BytesWritten, &BytesWritten); f_sync(&TempLogFile); } - + LEDs_SetAllLEDs(LEDMask); } @@ -141,7 +140,7 @@ int main(void) /* Fetch logging interval from EEPROM */ LoggingInterval500MS_SRAM = eeprom_read_byte(&LoggingInterval500MS_EEPROM); - + /* Check if the logging interval is invalid (0xFF) indicating that the EEPROM is blank */ if (LoggingInterval500MS_SRAM == 0xFF) LoggingInterval500MS_SRAM = DEFAULT_LOG_INTERVAL; @@ -152,10 +151,6 @@ int main(void) LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); - /* Discard the first sample from the temperature sensor, as it is generally incorrect */ - volatile uint8_t Dummy = Temperature_GetTemperature(); - (void)Dummy; - for (;;) { MS_Device_USBTask(&Disk_MS_Interface); @@ -170,9 +165,9 @@ void OpenLogFile(void) char LogFileName[12]; /* Get the current date for the filename as "DDMMYY.csv" */ - uint8_t Day, Month, Year; - DS1307_GetDate(&Day, &Month, &Year); - sprintf(LogFileName, "%02d%02d%02d.csv", Day, Month, Year); + TimeDate_t CurrentTimeDate; + DS1307_GetTimeDate(&CurrentTimeDate); + sprintf(LogFileName, "%02d%02d%02d.csv", CurrentTimeDate.Day, CurrentTimeDate.Month, CurrentTimeDate.Year); /* Mount the storage device, open the file */ f_mount(0, &DiskFATState); @@ -205,10 +200,10 @@ void SetupHardware(void) Temperature_Init(); Dataflash_Init(); USB_Init(); - TWI_Init(); - + TWI_Init(TWI_BIT_PRESCALE_4, TWI_BITLENGTH_FROM_FREQ(4, 50000)); + /* 500ms logging interval timer configuration */ - OCR1A = ((F_CPU / 1024) / 2); + OCR1A = (((F_CPU / 1024) / 2) - 1); TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); TIMSK1 = (1 << OCIE1A); @@ -229,7 +224,7 @@ void EVENT_USB_Device_Connect(void) void EVENT_USB_Device_Disconnect(void) { LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); - + /* Mount and open the log file on the Dataflash FAT partition */ OpenLogFile(); } @@ -239,14 +234,14 @@ void EVENT_USB_Device_ConfigurationChanged(void) { bool ConfigSuccess = true; - ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); ConfigSuccess &= HID_Device_ConfigureEndpoints(&Generic_HID_Interface); + ConfigSuccess &= MS_Device_ConfigureEndpoints(&Disk_MS_Interface); LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } -/** Event handler for the library USB Unhandled Control Request event. */ -void EVENT_USB_Device_UnhandledControlRequest(void) +/** Event handler for the library USB Control Request reception event. */ +void EVENT_USB_Device_ControlRequest(void) { MS_Device_ProcessControlRequest(&Disk_MS_Interface); HID_Device_ProcessControlRequest(&Generic_HID_Interface); @@ -259,22 +254,21 @@ void EVENT_USB_Device_UnhandledControlRequest(void) bool CALLBACK_MS_Device_SCSICommandReceived(USB_ClassInfo_MS_Device_t* const MSInterfaceInfo) { bool CommandSuccess; - + LEDs_SetAllLEDs(LEDMASK_USB_BUSY); CommandSuccess = SCSI_DecodeSCSICommand(MSInterfaceInfo); LEDs_SetAllLEDs(LEDMASK_USB_READY); - + return CommandSuccess; } /** HID class driver callback function for the creation of HID reports to the host. * * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced - * \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the - * generated report ID + * \param[in,out] ReportID Report ID requested by the host if non-zero, otherwise callback should set to the generated report ID * \param[in] ReportType Type of the report to create, either HID_REPORT_ITEM_In or HID_REPORT_ITEM_Feature * \param[out] ReportData Pointer to a buffer where the created report should be stored - * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent + * \param[out] ReportSize Number of bytes written in the report (or zero if no report is to be sent) * * \return Boolean true to force the sending of the report, false to let the library determine if it needs to be sent */ @@ -286,9 +280,8 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn { Device_Report_t* ReportParams = (Device_Report_t*)ReportData; - DS1307_GetDate(&ReportParams->Day, &ReportParams->Month, &ReportParams->Year); - DS1307_GetTime(&ReportParams->Hour, &ReportParams->Minute, &ReportParams->Second); - + DS1307_GetTimeDate(&ReportParams->TimeDate); + ReportParams->LogInterval500MS = LoggingInterval500MS_SRAM; *ReportSize = sizeof(Device_Report_t); @@ -300,7 +293,7 @@ bool CALLBACK_HID_Device_CreateHIDReport(USB_ClassInfo_HID_Device_t* const HIDIn * \param[in] HIDInterfaceInfo Pointer to the HID class interface configuration structure being referenced * \param[in] ReportID Report ID of the received report from the host * \param[in] ReportType The type of report that the host has sent, either HID_REPORT_ITEM_Out or HID_REPORT_ITEM_Feature - * \param[in] ReportData Pointer to a buffer where the created report has been stored + * \param[in] ReportData Pointer to a buffer where the received report has been stored * \param[in] ReportSize Size in bytes of the received HID report */ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDInterfaceInfo, @@ -310,10 +303,9 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI const uint16_t ReportSize) { Device_Report_t* ReportParams = (Device_Report_t*)ReportData; - - DS1307_SetDate(ReportParams->Day, ReportParams->Month, ReportParams->Year); - DS1307_SetTime(ReportParams->Hour, ReportParams->Minute, ReportParams->Second); - + + DS1307_SetTimeDate(&ReportParams->TimeDate); + /* If the logging interval has changed from its current value, write it to EEPROM */ if (LoggingInterval500MS_SRAM != ReportParams->LogInterval500MS) { @@ -321,3 +313,4 @@ void CALLBACK_HID_Device_ProcessHIDReport(USB_ClassInfo_HID_Device_t* const HIDI eeprom_update_byte(&LoggingInterval500MS_EEPROM, LoggingInterval500MS_SRAM); } } +