Current section
Files
Jump to
Current section
Files
src/pmod_mtds.hrl
% Protocol constants for Digilent's Pmod Multi-Touch Display Shield.
%
% The leading part of a typical packet looks like:
%
% 15 14 | 13 12 11 10 9 8 | 7 6 5 4 3 2 1 0 | ...
% HEADER | CLASS | COMMAND | ...
%
% The C++ driver awkwardly separates these values to achieve byte-alignemnt, but
% we use Erlang's bitstrings to organize them more natively.
-define(SPI_MODE, #{clock => {low, leading}}).
-define(HEADER_CONTROL, 2#00). % clsProtoChan
-define(HEADER_COMMAND, 2#01). % clsPacketCmd
-define(HEADER_STATUS, 2#10). % clsPacketSta
-define(HEADER_DATA, 2#11). % clsPacketData
% classes in the CONTROL group: 6 bits wide
-define(CONTROL_READ, 16#1). % chnCmdRead
-define(CONTROL_START, 16#2). % chnCmdStart
-define(CONTROL_SYNC, 16#3). % chnCmdSync
% responses in the CONTROL group: 6 bits wide
-define(CONTROL_READY, 16#20). % chnStaIdle
-define(CONTROL_BUSY, 16#21). % chnStaBusy
-define(CONTROL_DONE, 16#22). % chnStaDone
-define(CONTROL_READY_FOR_DATA, 16#23). % chnStaReady
-define(CONTROL_SYNCING, 16#25). % chnStaSync
% status codes
-define(STATUS_OK, 16#0). % staCmdSuccess
% commands in the utility class: 14 bits wide.
-define(UTILITY_READ_STATUS, 16#101). % cmdUtilReadStatusPacket
-define(UTILITY_INIT, 16#102). % cmdUtilInit
-define(UTILITY_CLEAR, 16#10B). % cmdUtilClearDisplay
-define(UTILITY_EVENT_CHECK, 16#111). % cmdUtilGetMsgStatus
-define(UTILITY_EVENT_POP, 16#114). % cmdUtilGetMsg
% commands in the gdi / graphics class: 14 bits wide.
-define(GRAPHICS_DS_DISPLAY, 16#201). % cmdGdiGetDisplayDs
-define(GRAPHICS_DS_NEW, 16#202). % cmdGdiGetDs
-define(GRAPHICS_DS_RELEASE, 16#203). % cmdGdiReleaseDs
-define(GRAPHICS_BITMAP_NEW, 16#209). % cmdGdiCreateBitmap
-define(GRAPHICS_BITMAP_RELEASE, 16#20A). % cmdGdiDestroyBitmap
-define(GRAPHICS_DS_FG_SET, 16#210). % cmdGdiSetFgColor
-define(GRAPHICS_DS_BG_SET, 16#212). % cmdGdiSetBgColor
-define(GRAPHICS_DS_ROP_SET, 16#21C). % cmdGdiSetDrwRop
-define(GRAPHICS_DS_FONT_SET, 16#220). % cmdGdiSetFont
-define(GRAPHICS_DS_FONT_GET, 16#221). % cmdGdiGetFont
-define(GRAPHICS_DS_BITMAP_SET, 16#222). % cmdGdiSetDrawingSurface
-define(GRAPHICS_DS_MOVE, 16#233). % cmdGdiMoveTo
-define(GRAPHICS_DS_LINE_TO, 16#235). % cmdGdiLineTo
% NOTE: 16#240 (cmdGdiTextOutCch) appears unimplemented, reports 16#81.
-define(GRAPHICS_TEXT, 16#241). % cmdGdiTextOutXcoYco
-define(GRAPHICS_DS_DRAW, 16#24A). % cmdGdiDrawBitmap
% classes in the HEADER_DATA group: 6 bits wide
-define(DATA_OUT, 16#1). % clsDataOut
-define(PACKET_OUT_MAX_SIZE, 512). % cbDhdrDataOutMax
% Device-side memory region constants.
-define(REGION_SURFACE, 16#C0000000). % sigHds
-define(REGION_BITMAP, 16#C1000000). % sigHbmp
-define(REGION_BRUSH, 16#C2000000). % sigHbr
-define(REGION_FONT, 16#C3000000). % sigHfnt
-define(REGION_WINDOW, 16#C4000000). % sigHwin
-define(HANDLE_SPACE, 16#00FFFFFF). % size of each handle space
-define(STOCK_FONT, 16#00300000). % sigHfntStock
% NOTE: hfntXSmall through hfntXLarge appear to be unimplemented, crash MTDS.
-define(STOCK_WINDOW, 16#00400000). % sigHwinStock