23 lines
1.2 KiB
C
23 lines
1.2 KiB
C
/* Host-only firmware harness for the actual PM35 port and Python client. */
|
|
#include "gas_logger_pm35.h"
|
|
#include "gas_logger_pcan.h"
|
|
#include <assert.h>
|
|
static gas_logger log;
|
|
static uint16_t bank0[9120],bank1[9120],modbus[128],voltage[2];
|
|
static uint32_t irq;
|
|
static uint32_t enter(void *u) { uint32_t old=irq;(void)u;irq=1;return old; }
|
|
static void leave(void *u,uint32_t state) { (void)u;assert(irq==1);irq=state; }
|
|
static gl_pm35_context context={modbus,voltage,enter,leave,0};
|
|
int host_init(void) { irq=0;return gl_pm35_init(&log,&context,bank0,bank1,9120); }
|
|
int host_capture(uint32_t time,uint16_t value)
|
|
{ modbus[28]=value;modbus[127]=128;voltage[0]=1234;voltage[1]=5678;return gl_capture(&log,time,1); }
|
|
int host_read(uint16_t address,uint16_t *out,uint16_t count)
|
|
{ return gl_modbus_read(&log,address,out,count); }
|
|
int host_write(uint16_t address,uint16_t value) { return gl_modbus_write(&log,address,value); }
|
|
int host_pcan_read(uint16_t address,uint16_t *out)
|
|
{
|
|
pcan_gas_region_t region;gl_pcan_region_init(®ion,&log);
|
|
if(address<region.base || (uint32_t)address>=region.base+region.count) return GL_ADDRESS;
|
|
return region.read(®ion,(uint16_t)(address-region.base),out);
|
|
}
|