diff --git a/gex/gex_client.c b/gex/gex_client.c index cb8e8e9..98c60aa 100644 --- a/gex/gex_client.c +++ b/gex/gex_client.c @@ -290,6 +290,7 @@ void GEX_DeInit(GexClient *gex) { if (gex == NULL) return; fsync(gex->acm_fd); + close(gex->acm_fd); destroy_unit_lookup(gex); TF_DeInit(gex->tf); free(gex); diff --git a/gex/utils/payload_builder.h b/gex/utils/payload_builder.h index e4d6568..9acbcc5 100644 --- a/gex/utils/payload_builder.h +++ b/gex/utils/payload_builder.h @@ -65,7 +65,7 @@ struct PayloadBuilder_ { #define pb_length(pb) ((pb)->current - (pb)->start) /** Reset the current pointer to start */ -#define pb_rewind(pb) do { pb->current = pb->start; } while (0) +#define pb_rewind(pb) do { (pb)->current = (pb)->start; } while (0) /** Write from a buffer */ diff --git a/main.c b/main.c index f815eaf..9b42419 100644 --- a/main.c +++ b/main.c @@ -2,38 +2,56 @@ #include #include #include +#include #include #include "gex.h" -#include "utils/hexdump.h" -#include "utils/payload_builder.h" +//#include "utils/hexdump.h" +//#include "utils/payload_builder.h" +//#include "utils/payload_parser.h" -static GexClient *gex; +// some examples of usage, for more details see the header files -/** ^C handler to close it gracefully */ -static void sigintHandler(int sig) -{ - (void)sig; - if (gex != NULL) GEX_DeInit(gex); - exit(0); -} +static GexClient *gex; /** Main function - test the library */ int main(void) { - // Bind ^C handler for safe shutdown - need to release the port - signal(SIGINT, sigintHandler); + gex = GEX_Init("/dev/ttyACM0", 200); + if (!gex) exit(1); - gex = GEX_Init("/dev/ttyACM0", 200); - if (!gex) exit(1); + GexUnit *bus = GEX_GetUnit(gex, "i2c", "I2C"); + assert(NULL != bus); + + sleep(2); + +#if 0 + GexUnit *adc = GEX_GetUnit(gex, "adc", "ADC"); + + GexMsg msg = GEX_Query(adc, 10, NULL, 0); + hexDump("Resp1", msg.payload, msg.len); + + fprintf(stderr, "Channels: "); + for(uint32_t i = 0; i < msg.len; i++) fprintf(stderr, "%d, ", msg.payload[i]); + + fprintf(stderr, "\n"); + + msg = GEX_Query(adc, 11, NULL, 0); + hexDump("Resp2", msg.payload, msg.len); + + PayloadParser pp = pp_start(msg.payload, msg.len, NULL); + uint32_t fconf = pp_u32(&pp); + float freal = pp_float(&pp); + fprintf(stderr, "Freq configured %d Hz, real freq %f Hz", fconf, freal); +#endif #if 0 - // INI read example - char buffer[2000]; - uint32_t len = GEX_IniRead(gex, buffer, 2000); - printf("%s", buffer); + // INI read example + char buffer[2000]; + uint32_t len = GEX_IniRead(gex, buffer, 2000); + printf("%s", buffer); - GEX_IniWrite(gex, buffer); + GEX_IniWrite(gex, buffer); printf("Written.\r\n"); #endif @@ -61,6 +79,6 @@ int main(void) GEX_Send(bg, 0x00, (uint8_t *)&cmd_set, sizeof(cmd_set)); #endif - GEX_DeInit(gex); - return 0; + GEX_DeInit(gex); + return 0; }