|
@@ -18,6 +18,7 @@
|
|
|
|
|
|
#include "hal.h"
|
|
#include "hal.h"
|
|
#include "boarddef.h"
|
|
#include "boarddef.h"
|
|
|
|
+#include "onewire.h"
|
|
|
|
|
|
/*
|
|
/*
|
|
******************************************************************************
|
|
******************************************************************************
|
|
@@ -55,6 +56,7 @@ static uint8_t testbuf[12];
|
|
/* stores 3 temperature values in millicelsius */
|
|
/* stores 3 temperature values in millicelsius */
|
|
static int32_t temperature[3];
|
|
static int32_t temperature[3];
|
|
static size_t devices_on_bus = 0;
|
|
static size_t devices_on_bus = 0;
|
|
|
|
+static onewire_error_t error_code;
|
|
|
|
|
|
/*
|
|
/*
|
|
* Config for underlying PWM driver.
|
|
* Config for underlying PWM driver.
|
|
@@ -133,8 +135,8 @@ static void strong_pullup_release(void) {
|
|
/*
|
|
/*
|
|
*
|
|
*
|
|
*/
|
|
*/
|
|
-void onewireTest(void) {
|
|
|
|
-
|
|
|
|
|
|
+void onewireMeasure(void) {
|
|
|
|
+ error_code = onewire_OK;
|
|
int16_t tmp;
|
|
int16_t tmp;
|
|
uint8_t rombuf[24];
|
|
uint8_t rombuf[24];
|
|
size_t i = 0;
|
|
size_t i = 0;
|
|
@@ -153,26 +155,38 @@ void onewireTest(void) {
|
|
if (true == onewireReset(&OWD1)){
|
|
if (true == onewireReset(&OWD1)){
|
|
|
|
|
|
memset(rombuf, 0x55, sizeof(rombuf));
|
|
memset(rombuf, 0x55, sizeof(rombuf));
|
|
- search_led_on();
|
|
|
|
devices_on_bus = onewireSearchRom(&OWD1, rombuf, 3);
|
|
devices_on_bus = onewireSearchRom(&OWD1, rombuf, 3);
|
|
- search_led_off();
|
|
|
|
- osalDbgCheck(devices_on_bus <= 3);
|
|
|
|
- osalDbgCheck(devices_on_bus > 0);
|
|
|
|
|
|
+ if (devices_on_bus == 0) {
|
|
|
|
+ error_code = onewire_No_Dev;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
if (1 == devices_on_bus){
|
|
if (1 == devices_on_bus){
|
|
/* test read rom command */
|
|
/* test read rom command */
|
|
presence = onewireReset(&OWD1);
|
|
presence = onewireReset(&OWD1);
|
|
- osalDbgCheck(true == presence);
|
|
|
|
|
|
+ if (true != presence) {
|
|
|
|
+ error_code = onewire_Dev_Lost;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
testbuf[0] = ONEWIRE_CMD_READ_ROM;
|
|
testbuf[0] = ONEWIRE_CMD_READ_ROM;
|
|
onewireWrite(&OWD1, testbuf, 1, 0);
|
|
onewireWrite(&OWD1, testbuf, 1, 0);
|
|
onewireRead(&OWD1, testbuf, 8);
|
|
onewireRead(&OWD1, testbuf, 8);
|
|
- osalDbgCheck(testbuf[7] == onewireCRC(testbuf, 7));
|
|
|
|
- osalDbgCheck(0 == memcmp(rombuf, testbuf, 8));
|
|
|
|
|
|
+ if (testbuf[7] != onewireCRC(testbuf, 7)) {
|
|
|
|
+ error_code = onewire_CRC_Err;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ if (0 != memcmp(rombuf, testbuf, 8)) {
|
|
|
|
+ error_code = onewire_MemCmp_Err;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
/* start temperature measurement on all connected devices at once */
|
|
/* start temperature measurement on all connected devices at once */
|
|
presence = onewireReset(&OWD1);
|
|
presence = onewireReset(&OWD1);
|
|
- osalDbgCheck(true == presence);
|
|
|
|
|
|
+ if (true != presence) {
|
|
|
|
+ error_code = onewire_Dev_Lost;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
testbuf[0] = ONEWIRE_CMD_SKIP_ROM;
|
|
testbuf[0] = ONEWIRE_CMD_SKIP_ROM;
|
|
testbuf[1] = ONEWIRE_CMD_CONVERT_TEMP;
|
|
testbuf[1] = ONEWIRE_CMD_CONVERT_TEMP;
|
|
|
|
|
|
@@ -191,7 +205,10 @@ void onewireTest(void) {
|
|
for (i=0; i<devices_on_bus; i++) {
|
|
for (i=0; i<devices_on_bus; i++) {
|
|
/* read temperature device by device from their scratchpads */
|
|
/* read temperature device by device from their scratchpads */
|
|
presence = onewireReset(&OWD1);
|
|
presence = onewireReset(&OWD1);
|
|
- osalDbgCheck(true == presence);
|
|
|
|
|
|
+ if (true != presence) {
|
|
|
|
+ error_code = onewire_Dev_Lost;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
testbuf[0] = ONEWIRE_CMD_MATCH_ROM;
|
|
testbuf[0] = ONEWIRE_CMD_MATCH_ROM;
|
|
memcpy(&testbuf[1], &rombuf[i*8], 8);
|
|
memcpy(&testbuf[1], &rombuf[i*8], 8);
|
|
@@ -199,7 +216,10 @@ void onewireTest(void) {
|
|
onewireWrite(&OWD1, testbuf, 10, 0);
|
|
onewireWrite(&OWD1, testbuf, 10, 0);
|
|
|
|
|
|
onewireRead(&OWD1, testbuf, 9);
|
|
onewireRead(&OWD1, testbuf, 9);
|
|
- osalDbgCheck(testbuf[8] == onewireCRC(testbuf, 8));
|
|
|
|
|
|
+ if (testbuf[8] != onewireCRC(testbuf, 8)) {
|
|
|
|
+ error_code = onewire_CRC_Err;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
memcpy(&tmp, &testbuf, 2);
|
|
memcpy(&tmp, &testbuf, 2);
|
|
temperature[i] = ((int32_t)tmp * 625) / 10;
|
|
temperature[i] = ((int32_t)tmp * 625) / 10;
|
|
}
|
|
}
|
|
@@ -212,6 +232,10 @@ void onewireTest(void) {
|
|
onewireStop(&OWD1);
|
|
onewireStop(&OWD1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+onewire_error_t onewireGetErrorCode(void) {
|
|
|
|
+ return error_code;
|
|
|
|
+}
|
|
|
|
+
|
|
uint8_t onewireGetDevicesNum(void) {
|
|
uint8_t onewireGetDevicesNum(void) {
|
|
return (uint8_t)devices_on_bus;
|
|
return (uint8_t)devices_on_bus;
|
|
}
|
|
}
|
|
@@ -220,6 +244,6 @@ int32_t onewireGetTemperature(const size_t num) {
|
|
if (num > devices_on_bus || num < devices_on_bus) {
|
|
if (num > devices_on_bus || num < devices_on_bus) {
|
|
return -999;
|
|
return -999;
|
|
} else {
|
|
} else {
|
|
- return temperature[num-1];
|
|
|
|
|
|
+ return temperature[num];
|
|
}
|
|
}
|
|
}
|
|
}
|