feat(inventory): add bcode.c (Phase 1: scan + UPC validation)
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
/*
|
||||
* bcode.c - barcode scanner serial channel (see bcode.h).
|
||||
*/
|
||||
#include "bcode.h"
|
||||
|
||||
GLDEF_C INT bcodeOpen(VOID **pChan)
|
||||
{
|
||||
/*
|
||||
* TTY:D = the top internal slot's serial port, where the barcode module
|
||||
* sits. mode -1 asks the driver for its default open mode.
|
||||
*
|
||||
* If the scanner needs specific line settings (baud rate, parity, stop
|
||||
* bits), configure the channel after opening with
|
||||
* p_iow(*pChan, P_FSET, &config);
|
||||
* where config is an E_CONFIG struct from p_config.h. See the RS232
|
||||
* section of the PLIB Reference. The module runs at up to 9600 baud.
|
||||
*/
|
||||
return p_open(pChan, "TTY:D", (UINT)-1);
|
||||
}
|
||||
|
||||
GLDEF_C VOID bcodeClose(VOID *chan)
|
||||
{
|
||||
if (chan != NULL)
|
||||
p_close(chan);
|
||||
}
|
||||
|
||||
GLDEF_C INT bcodeAssemble(UBYTE *raw, INT n, TEXT *line, INT *pLen, INT max)
|
||||
{
|
||||
INT i;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
UBYTE c = raw[i];
|
||||
|
||||
if (c == BCODE_TERM) {
|
||||
line[*pLen] = '\0';
|
||||
*pLen = 0;
|
||||
return 1;
|
||||
}
|
||||
if (c < ' ') /* skip LF, NULs and other control bytes */
|
||||
continue;
|
||||
if (*pLen < max - 1)
|
||||
line[(*pLen)++] = (TEXT)c;
|
||||
/* else: overflow - drop until the next terminator */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user