1497 lines
58 KiB
C
1497 lines
58 KiB
C
/******************************************************************************
|
|
*
|
|
* Copyright (c) 2003, ACEECA Limited. All rights reserved.
|
|
*
|
|
* File: MeazuraLib_V300b.h
|
|
*
|
|
* Release: 8th June 2004,
|
|
* MzLibVersion = 3,0,0,sysROMStageBeta,5
|
|
*
|
|
* Description:
|
|
* Meazura library API definitions.
|
|
*
|
|
* History:
|
|
* V300b:
|
|
* 19-Dec-03 HD: Swapped the definitions for PeripheralUSBCradle and PeripheralRS232Cradle
|
|
* to agree with the API.
|
|
* 20-Jan-04 HD: Added more baudrate enumerations for UARTcontrolCodeSetBaudRate.
|
|
* 18-Feb-04 HD: Incorporated two new enumerations for MzParallelControl which are:
|
|
* ParallelControlCodeEnableCS0 and ParallelControlCodeDisableCS0.
|
|
* These new enumerations will give the developer the ability to disable
|
|
* CS0 and use it as a GPIO pin if required.
|
|
* 18-Feb-04 HD: Added ParallelControlCodeGPIOSetCS1, ParallelControlCodeGPIOGetCS1,
|
|
* ParallelControlCodeGPIOSetCS0, ParallelControlCodeGPIOGetCS0 to the
|
|
* Parallel control enumerations.
|
|
* 20-Feb-04 HD: Improved the header document to be more compatible with GCC compilers as
|
|
* well as adding better descriptions for the *value parameter for each enumeration.
|
|
* 23-Feb-04 HD: Changed MOD_PWR and MOD_RESET to be inputs pulled low on exit of the API
|
|
* library. They were previously being driven low.
|
|
* 30-Mar-04 HD: Was not checking null pointer errors for ModuleControlCodeUART2ViaModule.
|
|
* The enumeration now returns mzNullPointerError if the boolean value given is a
|
|
* NULL pointer.
|
|
* 30-Mar-04 HD: Incorporated checking of requested MZIO functionality to see if it being currently
|
|
* used by the system. If the function requested is being used by the system the
|
|
* mzHwFunctionBusy error is returned. This checking incurs a small overhead on all the
|
|
* routines listed to the right.
|
|
* V301b
|
|
* 1-Apr-04 HD: Added a UARTcontrolCodeSetCustomBaudrate so that the caller can set a custom baudrate
|
|
* if the standard baudrates listed are insufficient.
|
|
* 19-Apr-04 HD: Changed numberOfBytes in MzSPITransferData and MzSPIReceiveData to be numberOfWords.
|
|
* HD: Changed the documentation to make clear the arguments in MzSPITransferData, MzSPIReceiveData
|
|
* MzUARTTrasmitData and MzUARTReceiveData.
|
|
* 22-Apr-04 HD: SPIcontrolCodeEnablePort now checks for a NULL pointer error on valueP.
|
|
* HD: ParallelControlCodeGPIOSetCS1, ParallelControlCodeGPIOGetCS1, ParallelControlCodeGPIOGetCS0, ParallelControlCodeGPIOSetCS0
|
|
* now check for NULL pointers before using valueP.
|
|
* HD: MzLibSleep and MzLibWake now check for NULL pointers when accessing the library globals structure.
|
|
* 12-May-04 HD: Fixed bug in V300b library where when changing UART1 baudrate, debugging data was being
|
|
* output from the library via UART1 port.
|
|
* V302b
|
|
* 4-Jun-04 HD: Corrected the bug where the signals returned from MzGPIOGetValue for the UART_TX and UART_RX masks were
|
|
* swapped around.
|
|
* 8-Jun-04 HD: Corrected the bug where non-zero bit values were being returned by MzGPIOGetValue for the un-masked bits.
|
|
* The function now only returns the bit field representing the GPIO lines defined in the mask fiel,
|
|
* all other bits are zeroed.
|
|
* HD: Corrected the bug where ModuleControlCodeMOD_PWRGet was setting the MOD_POWER pin to dedicated functions instead
|
|
* of GPIO.
|
|
* HD: ParallelControlCodeGPIOGetCS1 and ParallelControlCodeGPIOGetCS0 have been modified to return
|
|
* a true boolean value when returning the state of the corresponding pin.
|
|
*
|
|
* V303b
|
|
* 7-Oct-04 HD: UARTcontrolCodeSetBaudRate for baudrates greater than UARTBaudRate230400 in the enum list
|
|
* was causing a problem when checking for a valid baudrate value. This has now been changed
|
|
* to reference the maximum enum to UARTBaudRateLast.
|
|
* 24-Nov-04 HD: Found that external 100K pull downs on MOD_RESET and MOD_PWR were not sufficient to keep
|
|
* these lines low resulting in ~1.5V on the pins. On MOD_PWR this can sometimes result in
|
|
* the unit losing power overnight as it is drained by the module. The software now pushes
|
|
* these lines low when the library exits. Please note that if these pins are driven high
|
|
* from an external source, there is a potential to short circuit the pin causing undesirable
|
|
* results. It is advised that if the pins are being used as GPIO inputs, series resistors
|
|
* be placed on the respective lines to limit the current into the pins.
|
|
* HD: Instead of generating a fatal exception alert, now MeazuraErrParam is returned when
|
|
* the version pointer is a NULL value.
|
|
* 18-Jan-05 HD: Will now always check the peripheral resistor data is up to date by reading the value of the
|
|
* resistor directly. Was previously relying on the value of updated globals.
|
|
* HD: Corrected a bug in MzGetPeripheralID where by PeripheralNoDevicePresent was being returned in
|
|
* the place of Peripheral560K.
|
|
* 15-Mar-05 HD: Changed MzLibClose to NOT set UART2 to channel to the cradle interface by default. It now remains sticky
|
|
* even when the Meazura API library is closed.
|
|
* 31-Mar-05 HD: Modified the ParallelControlSetCS1Size opcode in MzParallelControl so that it doesn't
|
|
* always return an error code. The error code was being returned even if the hardware
|
|
* wasn't busy, hence not changing the size of the chip select.
|
|
*
|
|
* V304b
|
|
* 9-May-05 HD: Found that ParallelControlCodeEnableCS1 and ParallelControlCodeDisableCS1 were only addressing
|
|
* reconfiguration of the physical pin to be routed via the chip select function. The actual chip
|
|
* select was however not being enabled. Upon reset, the chip select was set to be enabled
|
|
* by the HAL and hence didn't cause a problem previously. However now that compact flash
|
|
* specifically disables the chip select if a CF card is not found, an bus error is
|
|
* generated causing Fatal Exception alerts. This has now been addresssed.
|
|
*
|
|
* V305
|
|
* 02-Sep-05 HD: Incorporated error checking in MzLibGetVersion if SysGetROMToken fails, such as times when the
|
|
* token doesn't exist.
|
|
*
|
|
*
|
|
*
|
|
*****************************************************************************/
|
|
|
|
#ifndef __MEAZURA_LIB_H__
|
|
#define __MEAZURA_LIB_H__
|
|
|
|
// If we're actually compiling the library code, then we need to
|
|
// eliminate the trap glue that would otherwise be generated from
|
|
// this header file in order to prevent compiler errors in CW Pro 2.
|
|
#ifdef BUILDING_Meazura_LIB
|
|
#define Meazura_LIB_TRAP(trapNum)
|
|
#else
|
|
#define Meazura_LIB_TRAP(trapNum) SYS_TRAP(trapNum)
|
|
#endif
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Library Version
|
|
#endif
|
|
/********************************************************************
|
|
* Library Version
|
|
********************************************************************/
|
|
// The library version scheme follows the system versioning scheme.
|
|
// See sysMakeROMVersion and friends in SystemMgr.h.
|
|
//
|
|
// For reference:
|
|
//
|
|
// 0xMMmfsbbb, where MM is major version, m is minor version
|
|
// f is bug fix, s is stage: 3-release,2-beta,1-alpha,0-development,
|
|
// bbb is build number for non-releases
|
|
// V1.12b3 would be: 0x01122003
|
|
// V2.00a2 would be: 0x02001002
|
|
// V1.01 would be: 0x01013000
|
|
#define MzLibVersion sysMakeROMVersion(3, 0, 0, sysROMStageBeta, 5)
|
|
|
|
|
|
/********************************************************************
|
|
* Meazura Feature Numbers
|
|
********************************************************************/
|
|
#define MzFeatureCreator 'AFtr' // ACEECA's feature creator
|
|
|
|
|
|
// Feature number for ROM version
|
|
#define MzFeatureIDVersion 'rs' // Feature number for ROM version
|
|
|
|
// Feature number for flash disk
|
|
#define MzFeatureFlashDiskVersion 2 // Feature number for flash disk
|
|
|
|
|
|
/********************************************************************
|
|
* Type and creator of Meazura Library database
|
|
********************************************************************/
|
|
#define MzLibCreatorID 'MAPI' // Meazura Library database creator
|
|
#define MzLibTypeID 'libr' // Standard library database type
|
|
|
|
/********************************************************************
|
|
* Internal library name which can be passed to SysLibFind()
|
|
********************************************************************/
|
|
#define MzLibName "MeazuraAPILibrary"
|
|
|
|
/********************************************************************
|
|
* Registered Meazura notifications
|
|
********************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark Meazura Notifications
|
|
#endif
|
|
#define MzAlmNotification 'MZAL' // External alarm notification
|
|
#define MzPerpNotification 'MZPE' // Peripheral change notification
|
|
#define MzModuleNotification 'MZMD' // Module interrupt notification
|
|
#define MzWakeupNotification 'MZWK' // Wakeup notification
|
|
|
|
// Note:
|
|
// All of these notifications have NULL notify data pointers, ie. no system data
|
|
// returned with the notification. They however support user data pointers that
|
|
// can be set up using SysNotifyRegister.
|
|
//
|
|
// When catching a MzPerNotification you can request peripheral information
|
|
// using the MzGetPeripheralID API.
|
|
//
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Meazura Key Bit definitions
|
|
#endif
|
|
/********************************************************************
|
|
* Meazura key bit definitions
|
|
********************************************************************/
|
|
#define MzLeftKeyBit keyBitHard1
|
|
#define MzCentreKeyBit keyBitHard2
|
|
#define MzRightKeyBit keyBitHard3
|
|
#define MzUpKeyBit keyBitPageUp
|
|
#define MzDownKeyBit keyBitPageDown
|
|
#define MzPowerKeyBit keyBitPower
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Meazura Virtual Key definitions
|
|
#endif
|
|
/********************************************************************
|
|
* Meazura virtual keys definitions
|
|
********************************************************************/
|
|
#define MzVLeftKey chrLeftArrow
|
|
#define MzVCentreKey vchrHard1
|
|
#define MzVRightKey chrRightArrow
|
|
#define MzVUpKey vchrPageUp
|
|
#define MzVDownKey vchrPageDown
|
|
#define MzVPowerKey vchrAutoOff
|
|
|
|
#define MzVirtualKeyMin 0x1D00
|
|
#define MzVirtualKeyMax 0x1D0F
|
|
#define MzBarcodeReceivedKey 0x1D00 // enqueued when a valid barcode is received
|
|
#define MzBatteryTriggerOn 0x1D01 // enqueued when the trigger
|
|
#define MzBatteryTriggerOff 0x1D02 // enqueued when the trigger
|
|
|
|
|
|
/************************************************************
|
|
* Meazura Library result codes
|
|
* (appErrorClass is reserved for 3rd party apps/libraries.
|
|
* It is defined in SystemMgr.h)
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark Error Codes
|
|
#endif
|
|
|
|
#define MeazuraErrParam (oemErrorClass | 0x1) // invalid parameter
|
|
#define MeazuraErrNotOpen (oemErrorClass | 0x2) // library is not open
|
|
#define mzLibAlreadyOpen (oemErrorClass | 0x3) // returned from MzLibClose() if the library is still open by others
|
|
#define mzMemoryError (oemErrorClass | 0x4) // memory error occurred
|
|
#define mzHwFunctionNotSupported (oemErrorClass | 0x5) // the function being accessed is not available on the current hardware
|
|
#define mzHwFunctionBusy (oemErrorClass | 0x6) // the function being accessed is being accessed by someone else
|
|
|
|
// API error codes
|
|
#define mzNullPointerError (oemErrorClass | 0xA) // Error setting the alarm
|
|
#define mzSetAlarmError (oemErrorClass | 0xB) // Error setting the alarm
|
|
#define mzCommsError (oemErrorClass | 0xC) // Error communicating with external processor
|
|
#define mzControlCodeError (oemErrorClass | 0xD) // Unrecognised control code
|
|
#define mzTimeOutError (oemErrorClass | 0xE) // Baud rate to SPI controller unrecognised
|
|
#define mzBadBaudRateError (oemErrorClass | 0x10) // Baud rate unrecognised
|
|
#define mzConfigError (oemErrorClass | 0x11) // Error setting up the configuration
|
|
|
|
#define mzNullCallbackProcPtrError (oemErrorClass | 0x12) // Null callback function pointer
|
|
#define mzNullCallbackDataPtrError (oemErrorClass | 0x13) // Null callback data pointer
|
|
|
|
#define mzUARTOverrunError (oemErrorClass | 0x14) // UART has received an overrun error
|
|
#define mzUARTFrameError (oemErrorClass | 0x15) // UART has received a frame error
|
|
#define mzUARTParityError (oemErrorClass | 0x16) // UART has received parity error
|
|
|
|
#define mzParallelChipSelectError (oemErrorClass | 0x17) // Unrecognised chip select
|
|
#define mzParallelOffsetError (oemErrorClass | 0x18) // Offset is out of range
|
|
#define mzParallelDataSizeError (oemErrorClass | 0x19) // The size and offset specified is out of the addressable chip select range
|
|
|
|
#define mzGPIOPinBusyError (oemErrorClass | 0x1A) // The pin is currently being used by some dedicated function
|
|
|
|
#define mzNoFIFODataError (oemErrorClass | 0x1B) // This error is returned when there is no data in the receive FIFO
|
|
#define mzPortNotOpenError (oemErrorClass | 0x1C) // Returned when the port is not openned.
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark -
|
|
#endif
|
|
/********************************************************************
|
|
* Callback function prototypes
|
|
********************************************************************/
|
|
typedef void (*ModuleCallbackPtr) (MemPtr userData);
|
|
typedef void (*SPICallbackPtr) (UInt8 SPIIntStatus, MemPtr userData);
|
|
typedef void (*UARTCallbackPtr) (UInt8 UARTIntStatus, MemPtr userData);
|
|
|
|
/********************************************************************
|
|
* Public Structures
|
|
********************************************************************/
|
|
typedef struct MzCallbackType
|
|
{
|
|
void* callbackProcPtr; // pointer to a callback procedure when SPI interrupt occurs
|
|
void* callbackDataPtr; // pointer to a user specified callback data structure passed to the interrupt
|
|
} MzCallbackType;
|
|
typedef MzCallbackType* MzCallbackPtr;
|
|
|
|
typedef struct MzVersion
|
|
{
|
|
UInt32 APIVersion; // The version of the API
|
|
UInt32 PICVersion; // The firmware version of the keypad board processor
|
|
UInt32 ROMVersion; // The ROM OS version
|
|
UInt32 HardwareVersion; // The hardware version, format 0xMMxxxbbb, MM - major version, bbb - minor version, x - don't care
|
|
} MzVersion;
|
|
typedef MzVersion* MzVersionPtr;
|
|
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Alarm API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// Alarm API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef struct MzAlarmType
|
|
{
|
|
Int8 second; // start time second (00 - 59)
|
|
Int8 minute; // start time minute (00 - 59)
|
|
Int8 hour; // start time hour (00 - 23)
|
|
Int8 day; // start time day (1 - 31), see notes
|
|
Int8 prdUnits; // period units, see description below
|
|
Int8 period; // period (0 - 255)
|
|
Int16 maxAlarmCnt; // maximum alarm count (0 = no limit)
|
|
Int8 almConfig; // Alarm configuration register
|
|
} MzAlarmType;
|
|
typedef MzAlarmType* MzAlarmPtr;
|
|
|
|
// Periodic units supported
|
|
#define tenMsUnits 0x40 // 10ms unit
|
|
#define secondsUnits 0x01 // seconds unit
|
|
#define minutesUnits 0x02 // minutes unit
|
|
#define hoursUnits 0x04 // hourly unit
|
|
#define daysUnits 0x08 // daily unit
|
|
#define weeksUnits 0x10 // weekly unit
|
|
#define monthsUnits 0x20 // montly unit
|
|
|
|
// Alarm configuration types
|
|
#define wakeOS_onAlarm 0x01
|
|
#define wakeModule_onAlarm 0x02
|
|
#define powerupUnit_onAlarm 0x04 // Not currently supported
|
|
#define kybSleep_afterAlarm 0x08
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark SPI API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// SPI API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzSPIControlCodeEnum
|
|
{
|
|
SPIcontrolCodeEnablePort,
|
|
// Enables the SPI hardware. This should be done before accessing
|
|
// other SPI configurations.
|
|
// *valueP = (UInt8) Pins to be used for SPI (see GPIO control API structures) eg. SPI_MOSI etc.
|
|
|
|
SPIcontrolCodeDisablePort,
|
|
// Disables the SPI hardware
|
|
// valueP = NULL
|
|
|
|
SPIcontrolCodeEnableInterrupts,
|
|
// Enables interrupts in the interruptType register
|
|
// *valueP = (UInt8) Interrupt types supported, eg. SPITxFIFOEmpty etc.
|
|
|
|
SPIcontrolCodeDisableInterrupts,
|
|
// Disables all currently configured SPI interrupts
|
|
// valueP = NULL
|
|
|
|
SPIcontrolCodeSetConfiguration,
|
|
// Sets the configuration bits in the config register
|
|
// *valueP = (UInt16) configuration tuple eg. SPIPortIsMaster etc.
|
|
|
|
SPIcontrolCodeSetBaudRate,
|
|
// Sets the baud rate divisor in the baudRate register
|
|
// *valueP = (UInt16) baud rate tuple eg. SPIbaudRateSysClkDiv4 etc.
|
|
|
|
SPIcontrolCodeSetSamplePeriod,
|
|
// Sets the amount of time between samples in master mode.
|
|
// *valueP = (UInt16) sample period value. Bitwise OR with samplePeriodSelect32khz
|
|
// to get the 32kHz clock instead of SPI clock (33Mhz/divisor)
|
|
|
|
SPIcontrolCodeSetBitsToTransfer,
|
|
// Sets the number of bits to transfer in the numberOfBits register
|
|
// *valueP = (UInt8) number of bits to transfer (1 to 16)
|
|
|
|
SPIcontrolCodeFlushReceiveFIFO,
|
|
// Flushes the receive fifo of the SPI
|
|
// valueP = NULL
|
|
|
|
SPIcontrolCodeSetCallbackProc
|
|
// Sets the callback function for SPI interrupt processing
|
|
// *valueP = (MzCallbackPtr) callback data information callbackProcPtr, callbackDataPtr
|
|
} MzSPIControlCodeEnum;
|
|
|
|
// Divisors for SPI baudRate (SPICONT1 register), SYSCLK= 33Mhz
|
|
#define SPIbaudRateSysClkDiv4 0x0000
|
|
#define SPIbaudRateSysClkDiv8 0x2000
|
|
#define SPIbaudRateSysClkDiv16 0x4000
|
|
#define SPIbaudRateSysClkDiv32 0x6000
|
|
#define SPIbaudRateSysClkDiv64 0x8000
|
|
#define SPIbaudRateSysClkDiv128 0xA000
|
|
#define SPIbaudRateSysClkDiv256 0xC000
|
|
#define SPIbaudRateSysClkDiv512 0xE000
|
|
#define SPIbaudRateMask 0xE000 // Data Rate mask
|
|
|
|
// SPI interrupt types supported (high byte of SPIINTCS register)
|
|
#define SPITxFIFOEmpty 0x01 // Interrupts when the transmit FIFO is empty
|
|
#define SPITxFIFOHalf 0x02 // Interrupts when the transmit FIFO has 4 words or fewer
|
|
#define SPITxFIFOFull 0x04 // Interrupts when the transmit FIFO is full
|
|
#define SPIRxFIFOReady 0x08 // Interrupts when the receive FIFO is ready with at least 1 byte/word of data
|
|
#define SPIRxFIFOHalf 0x10 // Interrupts when the receive FIFO has at least 4 words
|
|
#define SPIRxFIFOFull 0x20 // Interrupts when the receive FIFO is full
|
|
#define SPIRxFIFOOverflow 0x40 // Interrupts when the receive FIFO overflows
|
|
#define SPIBitCountOverflow 0x80 // Interrupts when the bit count overflows, see note 1
|
|
|
|
// SPI configuration types (SPICONT1 register)
|
|
#define SPIDRActiveLow 0x1000 // Configures Data Ready to be active low
|
|
#define SPIDRFallingEdge 0x0800 // Configures Data Ready to be falling edge
|
|
#define SPIPortIsMaster 0x0400 // Configures the SPI to be the master
|
|
#define SPISSPolarityIsHigh 0x0080 // Makes the SS active high
|
|
#define SPISSWaveformSelect 0x0040 // See note 2 below
|
|
#define SPIPhaseBitSet 0x0020 // See note 3 below
|
|
#define SPIPolarityBitSet 0x0010 //
|
|
|
|
// SPI bits to transfer mask (SPICONT1 register)
|
|
#define SPIBitCountMask 0x000F
|
|
|
|
// Sampling period clock type (SPISPC register)
|
|
#define samplePeriodSelect32khz 0x8000 // If set=32kHz selected, otherwise SPICLK selected.
|
|
#define sampleNumberOfClocksMask 0x7FFF // 15-bits for setting up how many clocks between samples
|
|
/*
|
|
// -------------------------------------------------------------------//
|
|
Notes:
|
|
// -------------------------------------------------------------------//
|
|
1:
|
|
BitCountOverflow interrupt
|
|
This interrupt is generated if the SPI controller is place in slave mode where
|
|
the SPI receive FIFO is advanced by the SS rising edge. An interrupt occurs if
|
|
at least 1 of the data locations in the receive FIFO had received more than 16 bits
|
|
in one burst. This interrupt can be cleared by reading the SPI data. There is
|
|
nothing to indicate which data word has overflowed, hence the bad data word may
|
|
still be in the receive FIFO if it is not empty.
|
|
|
|
2:
|
|
SPISSWaveformSelect
|
|
In master mode this bit selects the output wave form for the SS signal.
|
|
In slave mode, this bit controls RxFIFO advancement.
|
|
Master Mode:
|
|
0 = SS stays low between SPI 1 bursts
|
|
1 = Insert pulse between SPI 1 bursts
|
|
Slave Mode:
|
|
0 = RxFIFO advanced by Bit Count
|
|
1 = RxFIFO advanced by SS rising edge
|
|
|
|
3:
|
|
SPIPhaseBitSet and SPIPolarityBitSet
|
|
|
|
SPIPolarityBitSet = 1, SPIPhaseBitSet = 1
|
|
______ ___ ___ ___ _ ________
|
|
|___| |___| |___| |_.... |___|
|
|
|
|
SPIPolarityBitSet = 1, SPIPhaseBitSet = 0
|
|
__________ ___ ___ _ _____ ____
|
|
|___| |___| |___| .... |___|
|
|
|
|
SPIPolarityBitSet = 0, SPIPhaseBitSet = 1
|
|
___ ___ ___ _ ___
|
|
______| |___| |___| |___| ...._| |________
|
|
|
|
SPIPolarityBitSet = 0, SPIPhaseBitSet = 0
|
|
___ ___ ___ ___
|
|
__________| |___| |___| |_...._____| |____
|
|
|
|
______ _______ _______ _______ _______ ____
|
|
|__DN___||__DN-1_||__DN-2_|....|__D0___|
|
|
|
|
*/
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark UART API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// UART API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzUARTControlCodeEnum
|
|
{
|
|
UARTcontrolCodeEnablePort,
|
|
// Enables the UART hardware. This should be done before accessing
|
|
// other UART configurations.
|
|
// *valueP = (UInt8) UART configuration tuple, eg. UARTReceiverEnable etc
|
|
|
|
UARTcontrolCodeDisablePort,
|
|
// Disables the UART hardware
|
|
// valueP = NULL
|
|
|
|
UARTcontrolCodeEnableInterrupts,
|
|
// Enables interrupts in the interruptType register
|
|
// *valueP = (UInt8) Interrupt type tuple eg. UARTTxFIFOAvailable
|
|
|
|
UARTcontrolCodeDisableInterrupts,
|
|
// Disables all currently configured UART interrupts
|
|
// valueP = NULL
|
|
|
|
UARTcontrolCodeSetBaudRate,
|
|
// Sets the baud rate of the UART in bits/s
|
|
// *valueP = (UInt8) baud rate enum, eg. UARTBaudRate2400 etc.
|
|
|
|
UARTcontrolCodeFlushReceiveFifo,
|
|
// Flushes the receive fifo
|
|
// valueP = NULL
|
|
|
|
UARTcontrolCodeSetCallbackProc,
|
|
// Sets the callback function and data pointers for interrupt processing
|
|
// *valueP = (MzCallbackPtr) callback data information callbackProcPtr, callbackDataPtr
|
|
|
|
UARTcontrolCodeSetCustomBaudrate
|
|
// Sets a custom baudrate for UART1
|
|
// *valueP = (UInt32) baudrate in bits per second, eg. 115K2 == *valueP = 115200
|
|
} MzUARTControlCodeEnum;
|
|
|
|
typedef enum MzUARTBaudRateEnum
|
|
{
|
|
UARTBaudRate2400 = 1,
|
|
UARTBaudRate9600,
|
|
UARTBaudRate19200,
|
|
UARTBaudRate57600,
|
|
UARTBaudRate115200,
|
|
UARTBaudRate230400,
|
|
UARTBaudRate1200,
|
|
UARTBaudRate4800,
|
|
UARTBaudRate14400,
|
|
UARTBaudRate28800,
|
|
UARTBaudRate38400,
|
|
UARTBaudRateLast
|
|
} MzUARTBaudRateEnum;
|
|
|
|
// UART interrupt types supported
|
|
#define UARTTxFIFOAvailable 0x01 // TxFIFO has at least 1 slot empty
|
|
#define UARTTxFIFOHalf 0x02 // TxFIFO is less than half full
|
|
#define UARTTxFIFOEmpty 0x04 // TxFIFO is empty
|
|
#define UARTRxFIFOReady 0x20 // RxFIFO has at least 1 byte
|
|
#define UARTRxFIFOHalf 0x40 // RxFIFO has 4 or fewer slots remaining
|
|
#define UARTRxFIFOFull 0x80 // RxFIFO is full and may overrun
|
|
|
|
// UART configurations types
|
|
#define UARTReceiverEnable 0x40 // Enables the UART receiver
|
|
#define UARTTransmitterEnable 0x20 // Enables the UART transmitter
|
|
#define UARTParityEnable 0x08 // Enables parity checking
|
|
#define UARTOddParitySelected 0x04 // If set, odd parity selected. Otherwise even parity selected.
|
|
#define UARTTwoStopBitsSelected 0x02 // If set, two stop bits selected. Otherwise one stop bit selected.
|
|
#define UART8BitTransmitReceive 0x01 // If set, 8 bit transmit and receive length selected, otherwise 7 bit.
|
|
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Parallel interface API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// Parallel interface API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzParallelControlCodeEnum
|
|
{
|
|
ParallelControlGetCS1Size,
|
|
// Returns the size of CS1 in the mappedSize register
|
|
// *valueP = (UInt8) MzParallelCSSizeEnum of the CS1 size.
|
|
|
|
ParallelControlSetCS1Size,
|
|
// Sets the size of CS1 relative to the mappedSize register
|
|
// *valueP = (UInt8) MzParallelCSSizeEnum of the CS1 size.
|
|
|
|
ParallelControlCodeConfigureCS1,
|
|
// Sets up the configuration of the chip select,
|
|
// *valueP = (UInt16) parallel configuration tuple eg. ParallelReadOnly etc
|
|
|
|
ParallelControlCodeSetWaitstate,
|
|
// Sets up the number of waitstates for the chip select
|
|
// *valueP = (UInt16) parallel waitstate enum eg. ParallelWaitState0 etc
|
|
|
|
ParallelControlCodeEnableCS1,
|
|
// Enables Chip Select 1 of the MZIO bus
|
|
// valueP = NULL
|
|
|
|
ParallelControlCodeDisableCS1,
|
|
// Disables Chip Select 1 of the MZIO bus, sets CS1 pin as input pulled high
|
|
// valueP = NULL
|
|
|
|
ParallelControlCodeEnableCS0,
|
|
// Enables Chip Select 0 of the MZIO bus
|
|
// valueP = NULL
|
|
|
|
ParallelControlCodeDisableCS0,
|
|
// Disables Chip Select 0 of the MZIO bus, sets CS0 pin as input pulled high
|
|
// valueP = NULL
|
|
|
|
ParallelControlCodeGPIOSetCS1,
|
|
// Sets the CS1 chip select pin based on valueP. This will only work if the chip select
|
|
// function is disabled, use ParallelControlCodeDisableCS1.
|
|
// *valueP = (Boolean) true or false sets the pin accordingly.
|
|
|
|
ParallelControlCodeGPIOGetCS1,
|
|
// Gets the CS1 chip select pin and returns it to valueP. This will only work if the chip select
|
|
// function is disabled, use ParallelControlCodeDisableCS1.
|
|
// *valueP = (Boolean) true or false for the state of the pin.
|
|
|
|
ParallelControlCodeGPIOSetCS0,
|
|
// Sets the CS0 chip select pin based on valueP. This will only work if the chip select
|
|
// function is disabled, use ParallelControlCodeDisableCS0.
|
|
// *valueP = (Boolean) true or false sets the pin accordingly.
|
|
|
|
ParallelControlCodeGPIOGetCS0
|
|
// Gets the CS0 chip select pin and returns it to valueP. This will only work if the chip select
|
|
// function is disabled, use ParallelControlCodeDisableCS0.
|
|
// *valueP = (Boolean) true or false for the state of the pin.
|
|
|
|
} MzParallelControlCodeEnum;
|
|
|
|
// Parallel interface configuration types
|
|
#define ParallelReadOnly 0x8000 // Makes the chip select read only
|
|
#define ParallelFLASHSupport 0x0100 // When set, forces the WE* signal to go active after the chip select line
|
|
#define Parallel16BitBus 0x0080 // When set, forces the bus to be 16 bit, otherwise 8 bit bus, this is currently not supported
|
|
|
|
// Waitstates supported
|
|
typedef enum MzParallelWaitstateEnum
|
|
{
|
|
ParallelWaitState0 = 0, // Zero wait states
|
|
ParallelWaitState2, // Two wait states
|
|
ParallelWaitState4, // Four wait states
|
|
ParallelWaitState6, // Six wait states
|
|
ParallelWaitState8, // Eight wait states
|
|
ParallelWaitState10, // Ten wait states
|
|
ParallelWaitState12 // Twelve wait states
|
|
} MzParallelWaitstateEnum;
|
|
|
|
|
|
// Chip select mapping sizes supported
|
|
typedef enum MzParallelCSSizeEnum
|
|
{
|
|
ParallelMappingSize32K = 0,
|
|
ParallelMappingSize64K,
|
|
ParallelMappingSize128K,
|
|
ParallelMappingSize256K,
|
|
ParallelMappingSize512K,
|
|
ParallelMappingSize1M,
|
|
ParallelMappingSize2M,
|
|
ParallelMappingSize4M
|
|
} MzParallelCSSizeEnum;
|
|
|
|
|
|
|
|
/*
|
|
// -------------------------------------------------------------------//
|
|
Notes:
|
|
// -------------------------------------------------------------------//
|
|
1:
|
|
CS0 chip select limitation
|
|
This chip select is currently grouped with the chip select for flash
|
|
memory. This means that this chip select is always selected to be 8Mbytes
|
|
with zero wait states, configured for flash support and 16 bit wide.
|
|
*/
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark PWM control API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// PWM control API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzPWMControlCodeEnum
|
|
{
|
|
PWMControlCodeEnable,
|
|
// Enables the PWM controller
|
|
// valueP = NULL
|
|
|
|
PWMControlCodeDisable,
|
|
// Disables the PWM controller
|
|
// valueP = NULL
|
|
|
|
PWMControlCodeSetClockDivider,
|
|
// Sets up the clock divider (MzPWMClockDividerEnum)
|
|
// *valueP = (UInt8) MzPWMClockDividerEnum enum eg. PWMbaudRateSysClkDiv4
|
|
|
|
PWMControlCodeSetPolarity,
|
|
// Value=1 inverts the polarity, defaults to zero
|
|
// *valueP = (Boolean) true or false for setting polarity
|
|
|
|
PWMControlCodeSetPeriod,
|
|
// Sets the 16-bit period value
|
|
// *valueP = (UInt16) PWM period to set eg. 500 (clock cycles)
|
|
|
|
PWMControlCodeSetPulseWidth,
|
|
// Set the 16-bit pulse width value
|
|
// *valueP = (UInt16) PWM pulse width to period eg. 250 => 50%
|
|
|
|
PWMControlCodeGetPin,
|
|
// Returns the value of the PWM pin
|
|
// *valueP = (Boolean) On or Off for state of the PWM pin
|
|
|
|
PWMControlCodeGetCounter
|
|
// Returns the PWM counter value
|
|
// *valueP = (UInt16) PWM counter value
|
|
} MzPWMControlCodeEnum;
|
|
|
|
typedef enum MzPWMClockDividerEnum
|
|
{
|
|
PWMbaudRateSysClkDiv4 = 0,
|
|
PWMbaudRateSysClkDiv8,
|
|
PWMbaudRateSysClkDiv16,
|
|
PWMbaudRateSysClkDiv32,
|
|
PWMbaudRateSysClkDiv64,
|
|
PWMbaudRateSysClkDiv128,
|
|
PWMbaudRateSysClkDiv256,
|
|
PWMbaudRateSysClkDiv512
|
|
} MzPWMClockDividerEnum;
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Module control API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// Module control API structures
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzModuleControlCodeEnum
|
|
{
|
|
ModuleControlCodeEnableModuleInterrupt,
|
|
// Enables the MOD_IREQ* interrupts
|
|
// valueP = NULL
|
|
|
|
ModuleControlCodeDisableModuleInterrupt,
|
|
// Disables the MOD_IREQ* interrupt
|
|
// valueP = NULL
|
|
|
|
ModuleControlCodeMOD_IREQGet,
|
|
// Gets MOD_IREQ
|
|
// *valueP = (Boolean) On of Off for MOD_IREQ
|
|
|
|
ModuleControlCodeMOD_RESETSet,
|
|
// Sets MOD_RESET to the valueP
|
|
// *valueP = (Boolean) On of Off for MOD_RESET
|
|
|
|
ModuleControlCodeMOD_RESETGet,
|
|
// Get MOD_RESET current state
|
|
// *valueP = (Boolean) On of Off for MOD_RESET
|
|
|
|
ModuleControlCodeMOD_PWRSet,
|
|
// Sets MOD_PWR to valueP
|
|
// *valueP = (Boolean) On of Off for MOD_PWR
|
|
|
|
ModuleControlCodeMOD_PWRGet,
|
|
// Get MOD_PWR current state
|
|
// *valueP = (Boolean) On of Off for MOD_PWR
|
|
|
|
ModuleControlCodeUART2ViaModule,
|
|
// If true will enable UART2 to communiate via the MZIO bus, default is false.
|
|
// *valueP = (Boolean) On of Off for UART2ViaModule
|
|
|
|
ModuleControlCodeSetCallbackProc
|
|
// Sets the callback function and data pointer for interrupt processing
|
|
// *valueP = (MzCallbackPtr) callback data information callbackProcPtr, callbackDataPtr
|
|
} MzModuleControlCodeEnum;
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark GPIO control API structures
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// GPIO control API structures
|
|
// -------------------------------------------------------------------//
|
|
// Note that these GPIO signals will not toggle if the corresponding signals are used
|
|
// in either SPI or UART modes of operation.
|
|
#define SPI_MOSI 0x01
|
|
#define SPI_MISO 0x02
|
|
#define SPI_CLK 0x04
|
|
#define SPI_SS 0x08
|
|
|
|
#define SPI_DR 0x10
|
|
#define UART_TX 0x20
|
|
#define UART_RX 0x40
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark Peripheral ID enumeration tags
|
|
#endif
|
|
// -------------------------------------------------------------------//
|
|
// Peripheral ID enumeration tags
|
|
// -------------------------------------------------------------------//
|
|
typedef enum MzPeripheralIDEnum
|
|
{
|
|
PeripheralError = 0,
|
|
Peripheral22K, // USB Charging cradle
|
|
Peripheral27K, // RS232 Charging cradle
|
|
Peripheral33K,
|
|
Peripheral39K,
|
|
Peripheral47K, // USB Comms cable
|
|
Peripheral56K, // RS232 Comms cable
|
|
Peripheral68K,
|
|
Peripheral82K,
|
|
Peripheral100K,
|
|
Peripheral120K,
|
|
Peripheral150K,
|
|
Peripheral180K,
|
|
Peripheral220K,
|
|
Peripheral270K,
|
|
Peripheral330K,
|
|
Peripheral390K,
|
|
Peripheral470K,
|
|
Peripheral560K,
|
|
PeripheralNoDevicePresent
|
|
} MzPeripheralIDEnum;
|
|
|
|
#define PeripheralUSBCable Peripheral47K
|
|
#define PeripheralUSBCradle Peripheral22K
|
|
#define PeripheralRS232Cable Peripheral56K
|
|
#define PeripheralRS232Cradle Peripheral27K
|
|
#define PeripheralRS232Keybd Peripheral68K
|
|
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark -
|
|
#endif
|
|
/********************************************************************
|
|
* API Prototypes
|
|
********************************************************************/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
//--------------------------------------------------
|
|
// Standard library open, close, sleep and wake functions
|
|
//--------------------------------------------------
|
|
|
|
extern Err MzLibOpen(UInt16 refNum)
|
|
Meazura_LIB_TRAP(sysLibTrapOpen);
|
|
|
|
extern Err MzLibClose(UInt16 refNum)
|
|
Meazura_LIB_TRAP(sysLibTrapClose);
|
|
|
|
extern Err MzLibSleep(UInt16 refNum)
|
|
Meazura_LIB_TRAP(sysLibTrapSleep);
|
|
|
|
extern Err MzLibWake(UInt16 refNum)
|
|
Meazura_LIB_TRAP(sysLibTrapWake);
|
|
|
|
|
|
//--------------------------------------------------
|
|
// Custom library API functions
|
|
//--------------------------------------------------
|
|
//-----------------------------------------------------------------------------
|
|
// Meazura library function trap ID's. Each library call gets a trap number:
|
|
// MeazuraLibTrapXXXX which serves as an index into the library's dispatch table.
|
|
// The constant sysLibTrapCustom is the first available trap number after
|
|
// the system predefined library traps Open,Close,Sleep & Wake.
|
|
//-----------------------------------------------------------------------------
|
|
#ifdef __MWERKS__
|
|
#pragma mark API Traps
|
|
#endif
|
|
|
|
#define meazuraLibTrapMzLibGetVersion (sysLibTrapCustom + 0)
|
|
#define meazuraLibTrapMzAlmSetAlarm (sysLibTrapCustom + 1)
|
|
#define meazuraLibTrapMzAlmStopAlarm (sysLibTrapCustom + 2)
|
|
#define meazuraLibTrapMzSPIControl (sysLibTrapCustom + 3)
|
|
#define meazuraLibTrapMzSPITransferData (sysLibTrapCustom + 4)
|
|
#define meazuraLibTrapMzSPIReadData (sysLibTrapCustom + 5)
|
|
#define meazuraLibTrapMzSPIGetFIFOStatus (sysLibTrapCustom + 6)
|
|
#define meazuraLibTrapMzUARTControl (sysLibTrapCustom + 7)
|
|
#define meazuraLibTrapMzUARTSendData (sysLibTrapCustom + 8)
|
|
#define meazuraLibTrapMzUARTReceiveData (sysLibTrapCustom + 9)
|
|
#define meazuraLibTrapMzUARTGetFIFOStatus (sysLibTrapCustom + 10)
|
|
#define meazuraLibTrapMzParallelControl (sysLibTrapCustom + 11)
|
|
#define meazuraLibTrapMzParallelSendData (sysLibTrapCustom + 12)
|
|
#define meazuraLibTrapMzParallelReadData (sysLibTrapCustom + 13)
|
|
#define meazuraLibTrapMzModuleControl (sysLibTrapCustom + 14)
|
|
#define meazuraLibTrapMzGPIOGetValue (sysLibTrapCustom + 15)
|
|
#define meazuraLibTrapMzGPIOSetValue (sysLibTrapCustom + 16)
|
|
#define meazuraLibTrapMzGetPeripheralID (sysLibTrapCustom + 17)
|
|
#define meazuraLibTrapMzPWMControl (sysLibTrapCustom + 18)
|
|
#define MeazuraLibTrapLast (sysLibTrapCustom + 19)
|
|
|
|
#ifdef __MWERKS__
|
|
#pragma mark -
|
|
#endif
|
|
|
|
/************************************************************
|
|
*
|
|
* FUNCTION: MzLibGetVersions
|
|
*
|
|
* DESCRIPTION: Get our library API version. The Sample library does not
|
|
* need to be "opened" to call MzLibGetLibAPIVersion.
|
|
*
|
|
* PARAMETERS: refNum Sample library reference number
|
|
* version Pointer to a structure for storing the version numbers
|
|
*
|
|
* CALLED BY: Anyone wishing to get our library API version
|
|
*
|
|
* RETURNS: errNone no error
|
|
*
|
|
* REVISION HISTORY:
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzLibGetVersion
|
|
#endif
|
|
extern Err MzLibGetVersion(UInt16 refNum, MzVersionPtr version)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzLibGetVersion);
|
|
|
|
// Alarm APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzAlmSetAlarm()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function serves to set up the external alarms.
|
|
* It supports repeating alarms for 10 miliseconds,seconds,
|
|
* minutes, hours, day, weeks and months. The function sets up
|
|
* an initial start time, and periodic alarms occur after that point.
|
|
* If the start day is NULL, the alarms will be immediately
|
|
* started. Also supports waking up the device after a #max
|
|
* number of alarms. If this number is NULL, the system will
|
|
* keep on getting alarms.
|
|
*
|
|
*
|
|
* PARAMETERS:
|
|
* -> refNum reference number of the library
|
|
* -> alarmsP pointer to a MzAlarmType structure
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzSetAlarmError Error in setting the alarm.
|
|
* mzCommsError Communications error whilst setting the alarm.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set up external Alarms
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzAlmSetAlarm
|
|
#endif
|
|
extern Err MzAlmSetAlarm(UInt16 refNum, MzAlarmPtr alarmsP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzAlmSetAlarm);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzAlmStopAlarm()
|
|
*
|
|
* DESCRIPTION:
|
|
* Stop alarms in Meazura keyboard alarm module
|
|
*
|
|
*
|
|
* PARAMETERS:
|
|
* -> refNum reference number of the library
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzCommsError Communications error whilst setting the alarm.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to stop external Alarms
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzAlmStopAlarm
|
|
#endif
|
|
extern Err MzAlmStopAlarm(UInt16 refNum)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzAlmStopAlarm);
|
|
|
|
|
|
|
|
// SPI APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzSPIControl()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is a driver to interface to the VZ's SPI 1 port
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> controlCode Enumerated control code to control the function (MzSPIControlCodeEnum)
|
|
* -> valueP pointer to a data value or structure.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzControlCodeError Unrecognised control code.
|
|
* mzBadBaudRateError Error setting up the baud rate.
|
|
* mzConfigError Error setting up the configuration.
|
|
* mzNullPointerError Null pointer error.
|
|
* mzNullCallbackProcPtrError Null callback function pointer error.
|
|
* mzNullCallbackDataPtrError Null callback data pointer error.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The SPI function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set up the SPI controller
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzSPIControl
|
|
#endif
|
|
extern Err MzSPIControl(UInt16 refNum, UInt16 controlCode, void* valueP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzSPIControl);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzSPITransferData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function loads words into the SPI fifo. If the fifo
|
|
* is full, the function will try until all words have been
|
|
* placed in the TxFIFO. If 0 words specified, the function
|
|
* will transfer 1 word. This function also checks to see if the
|
|
* port is opened.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> dataPtr Pointer to data words to transfer.
|
|
* -> numberOfWords Pointer to number of words to transfer. Returns number of words
|
|
* left to transfer. Word width is set between 1 and 16 bits
|
|
* using the SPIcontrolCodeSetBitsToTransfer in the MzSPIControl API.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzPortNotOpenError Port is not openned error.
|
|
* mzHwFunctionBusy The SPI function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to send SPI data to the SPI transmit fifo.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzSPITransferData
|
|
#endif
|
|
extern Err MzSPITransferData(UInt16 refNum, UInt16* dataPtr, UInt16 *numberOfWords)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzSPITransferData);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzSPIReadData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function reads words from the SPI receive fifo. If the fifo
|
|
* is empty, the function will return an error immediately.
|
|
* If 0 words specified, the function will read 1 word.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> dataPtr Double pointer to the buffer to receive data into. The address it is pointing to
|
|
* is updated as words are read from the receive FIFO and added to the buffer.
|
|
* -> numberOfWords Number of words to receive. Returns number of words
|
|
* left to be received. Word width is set between 1 and 16 bits
|
|
* using the SPIcontrolCodeSetBitsToTransfer in the MzSPIControl API.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzNoFIFODataError RxFIFO has no data
|
|
* mzHwFunctionBusy The SPI function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to read SPI data to the SPI receive fifo.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzSPIReadData
|
|
#endif
|
|
extern Err MzSPIReadData(UInt16 refNum, UInt16** dataPtr, UInt16 *numberOfWords)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzSPIReadData);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzSPIGetFIFOStatus()
|
|
*
|
|
* DESCRIPTION:
|
|
* Gets the status of both the receive and transmit FIFOs of the SPI controller
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
*
|
|
* RETURNS:
|
|
* UInt8 FIFO status
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to obtain the status of the transmit and receive fifos.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzSPIGetFIFOStatus
|
|
#endif
|
|
extern UInt8 MzSPIGetFIFOStatus(UInt16 refNum)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzSPIGetFIFOStatus);
|
|
|
|
|
|
// UART APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzUARTControl()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is a driver to interface to the VZ's UART 1 port
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> controlCode Enumerated control code to control the function (MzUARTControlCodeEnum)
|
|
* -> valueP pointer to a data value or structure.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzControlCodeError Unrecognised control code.
|
|
* mzBadBaudRateError Error setting up the baud rate.
|
|
* mzConfigError Error setting up the configuration.
|
|
* mzNullPointerError Null pointer error.
|
|
* mzNullCallbackProcPtrError Null callback function pointer error.
|
|
* mzNullCallbackDataPtrError Null callback data pointer error.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The UART1 function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set up external Alarms
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzUARTControl
|
|
#endif
|
|
extern Err MzUARTControl(UInt16 refNum, UInt16 controlCode, void* valueP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzUARTControl);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzUARTSendData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function loads bytes into the UART TxFIFO. If the fifo
|
|
* is full, the function will try until all bytes have been placed
|
|
* in the TxFIFO. If 0 words specified, the function will transfer 1 byte.
|
|
* This function will send as many bytes requested without a timeout.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> dataPtr Pointer to data words to transfer.
|
|
* -> numberOfBytes Number of words to transfer. Returns the number of bytes
|
|
* left to transfer.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzPortNotOpenError Port is not opened error.
|
|
* mzHwFunctionBusy The UART1 function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to send UART data to the UART transmit fifo.
|
|
*
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzUARTSendData
|
|
#endif
|
|
extern Err MzUARTSendData(UInt16 refNum, UInt8* dataPtr, UInt16* numberOfBytes)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzUARTSendData);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzUARTReceiveData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function reads bytes from the UART RxFIFO. If the RxFIFO
|
|
* is empty, the function will return immediately with an error.
|
|
* If 0 words specified, the function will transfer 1 word.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> dataPtr Double pointer to the buffer to receive data into. The address it is pointing to
|
|
* is updated as words are read from the receive FIFO and added to the buffer.
|
|
* -> numberOfBytes Number of words to transfer. Returns number of bytes
|
|
* left to receive.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzNoFIFODataError RxFIFO has no data
|
|
* mzUARTOverrunError UART has received an overrun error
|
|
* mzUARTFrameError UART has received a frame error
|
|
* mzUARTParityError UART has received parity error
|
|
* mzHwFunctionBusy The UART1 function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to read UART data from the UART receive fifo.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzUARTReceiveData
|
|
#endif
|
|
extern Err MzUARTReceiveData(UInt16 refNum, UInt8** dataPtr, UInt16* numberOfBytes)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzUARTReceiveData);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzUARTGetFIFOStatus()
|
|
*
|
|
* DESCRIPTION:
|
|
* Gets the status of the UART TxFIFO only. There is a hardware limitation
|
|
* to get the UART RxFIFO status information without taking the byte out from
|
|
* the RxFIFO. The use RxFIFO status is only available using interrupts.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
*
|
|
* RETURNS:
|
|
* UInt8 TxFIFO status
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to obtain the status of the transmit and receive fifos.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzUARTGetFIFOStatus
|
|
#endif
|
|
extern UInt8 MzUARTGetFIFOStatus(UInt16 refNum)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzUARTGetFIFOStatus);
|
|
|
|
|
|
// Parallel Interface APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzParallelControl()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function is a driver to interface to the parallel interface on
|
|
* a MZIO module.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> controlCode Enumerated control code to control the function (MzParallelControlCodeEnum)
|
|
* -> valueP pointer to a data value or structure.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzControlCodeError Unrecognised control code.
|
|
* mzConfigError Error setting up the configuration.
|
|
* mzNullPointerError Null pointer error.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The parallel function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set up parallel control.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzParallelControl
|
|
#endif
|
|
extern Err MzParallelControl(UInt16 refNum, UInt16 controlCode, void* valueP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzParallelControl);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzParallelSendData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function writes sizeOfData number of bytes or words
|
|
* via parallel adressing on the MZIO bus. One of two chip selects
|
|
* can be selected to do the job. If 0 words specified, the function
|
|
* will transfer 1 word.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> chipSelect Points to which chip select to send data to, 0 or 1.
|
|
* -> offset The offset relative to the base of the chip select to start sending data to.
|
|
* -> dataPtr Pointer to data bytes or words to transfer.
|
|
* -> sizeOfData Number of data elements to transfer, will limit transfer beyond size of
|
|
* chip select.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzNullPointerError Null pointer error
|
|
* mzParallelChipSelectError Unrecognised chip select
|
|
* mzParallelOffsetError Offset is out of chip select range
|
|
* mzParallelDataSizeError sizeOfData + offset is out of chip select range
|
|
* mzHwFunctionBusy The parallel function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to send data to the module on the parallel interface.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzParallelSendData
|
|
#endif
|
|
extern Err MzParallelSendData(UInt16 refNum, UInt8 chipSelect, UInt32 offset, UInt16* dataPtr, UInt32 sizeOfData)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzParallelSendData);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzParallelReadData()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function reads sizeOfData number of bytes from the MZIO
|
|
* parallel interface. Reads can be performed on one or the other of the chip selects
|
|
* available.If 0 words specified, the function will transfer 1 word.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> chipSelect Points to which chip select to read data from, 0 or 1.
|
|
* -> offset The offset relative to the base of the chip select to start reading data.
|
|
* -> dataPtr Pointer to data bytes or words to read.
|
|
* -> sizeOfData Number of bytes to transfer, will limit transfer beyond size of
|
|
* chip select.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzNullPointerError Null pointer error
|
|
* mzParallelChipSelectError Unrecognised chip select
|
|
* mzParallelOffsetError Offset is out of chip select range
|
|
* mzParallelDataSizeError sizeOfData + offset is out of chip select range
|
|
* mzHwFunctionBusy The parallel function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to read data from a module via the parallel interface.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzParallelReadData
|
|
#endif
|
|
extern Err MzParallelReadData(UInt16 refNum, UInt8 chipSelect, UInt32 offset, UInt16* dataPtr, UInt32 sizeOfData)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzParallelReadData);
|
|
|
|
// Module Control APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzModuleControl()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function controls various functionalities on a MZIO module.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> controlCode Enumerated control code to control the function (MzParallelControlCodeEnum)
|
|
* -> valueP pointer to a data value or structure.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzControlCodeError Unrecognised control code.
|
|
* mzConfigError Error setting up the configuration.
|
|
* mzNullPointerError Null pointer error.
|
|
* mzNullCallbackProcPtrError Null callback function pointer error.
|
|
* mzNullCallbackDataPtrError Null callback data pointer error.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The module control function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set up external Alarms
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzModuleControl
|
|
#endif
|
|
extern Err MzModuleControl(UInt16 refNum, UInt16 controlCode, void* valueP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzModuleControl);
|
|
|
|
// GPIO Control APIs
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzGPIOGetValue()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function gets the value of a set of GPIO pins that
|
|
* are currently not used by either the SPI or UART modules.
|
|
* If the SPI_DR* or PWM function is in use then an error code will be returned.
|
|
* This function will set the GPIO pins as inputs with internal pullups enabled.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> mask A byte bitfield containing the GPIO pins to get.
|
|
* -> value Pointer to the returned byte value of the GPIO pins.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzNullPointerError Returned if a null pointer is given.
|
|
* mzGPIOPinBusyError Pin in use by PWM or SPI_DR* dedicated function
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The GPIO function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to read GPIO pins.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzGPIOGetValue
|
|
#endif
|
|
extern Err MzGPIOGetValue(UInt16 refNum, UInt8 mask, UInt8 *value)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzGPIOGetValue);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzGPIOSetValue()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function sets the value of a set of GPIO pins that
|
|
* are currently not used by either the SPI or UART modules.
|
|
* The pins are automatically configured as output GPIO if available.
|
|
* Pins that are configured as dedicated functions (UART or SPI) will not be affected
|
|
* If the SPI_DR* or PWM function is in use then an error code will be returned
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> mask A byte bitfield containing the GPIO pins to set.
|
|
* -> value The value for which to set the GPIO pins to.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzGPIOPinBusyError Pin in use by PWM or SPI_DR* dedicated function
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The GPIO function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to set GPIO pins.
|
|
*
|
|
* Written by:
|
|
* Hemon Dey
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzGPIOSetValue
|
|
#endif
|
|
extern Err MzGPIOSetValue(UInt16 refNum, UInt8 mask, UInt8 value)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzGPIOSetValue);
|
|
|
|
// Get peripheral ID
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzGetPeripheralID()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function returns the value of the peripheral ID interms of
|
|
* the Peripheral ID enumeration type.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
*
|
|
* RETURNS:
|
|
* MzPeripheralIDEnum Returned enumeration of the peripheral ID
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants to get peripheral ID.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzGetPeripheralID
|
|
#endif
|
|
extern UInt8 MzGetPeripheralID(UInt16 refNum)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzGetPeripheralID);
|
|
|
|
/************************************************************
|
|
*
|
|
* ACEECA API
|
|
* FUNCTION: MzPWMControl()
|
|
*
|
|
* DESCRIPTION:
|
|
* This function gives control over the PWM module which is
|
|
* currently multiplexed with the DATA Ready pin of the SPI
|
|
* controller. When this controller is enabled, the Data ready pin
|
|
* is configured as an output pin, and will operate as the PWM
|
|
* output.
|
|
*
|
|
* PARAMETERS:
|
|
*
|
|
* -> refNum Reference number of the library
|
|
* -> controlCode Enumerated control code to control the function
|
|
* -> valueP pointer to a data value or structure.
|
|
*
|
|
* RETURNS:
|
|
* errNone No error
|
|
* mzControlCodeError Unrecognised control code.
|
|
* mzNullPointerError Null pointer error.
|
|
* mzHwFunctionNotSupported This function is not available on the current hardware
|
|
* mzHwFunctionBusy The PWM function is in use by the system
|
|
*
|
|
* CALLED BY:
|
|
* Anybody who wants enable and control the PWM module.
|
|
*
|
|
*************************************************************/
|
|
#ifdef __MWERKS__
|
|
#pragma mark MzPWMControl
|
|
#endif
|
|
extern Err MzPWMControl(UInt16 refNum, UInt16 controlCode, void* valueP)
|
|
Meazura_LIB_TRAP(meazuraLibTrapMzPWMControl);
|
|
|
|
|
|
// For loading the library in Palm OS Mac emulation mode
|
|
extern Err MeazuraLibInstall(UInt16 refNum, SysLibTblEntryPtr entryP);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#endif // __MEAZURA_LIB_H__
|